//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2022 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

import Foundation
import SotoCore

extension IoTWireless {
    // MARK: Enums

    public enum ApplicationConfigType: String, CustomStringConvertible, Codable, _SotoSendable {
        case semtechGeoLocation = "SemtechGeolocation"
        public var description: String { return self.rawValue }
    }

    public enum BatteryLevel: String, CustomStringConvertible, Codable, _SotoSendable {
        case critical
        case low
        case normal
        public var description: String { return self.rawValue }
    }

    public enum ConnectionStatus: String, CustomStringConvertible, Codable, _SotoSendable {
        case connected = "Connected"
        case disconnected = "Disconnected"
        public var description: String { return self.rawValue }
    }

    public enum DeviceState: String, CustomStringConvertible, Codable, _SotoSendable {
        case provisioned = "Provisioned"
        case registerednotseen = "RegisteredNotSeen"
        case registeredreachable = "RegisteredReachable"
        case registeredunreachable = "RegisteredUnreachable"
        public var description: String { return self.rawValue }
    }

    public enum DlClass: String, CustomStringConvertible, Codable, _SotoSendable {
        case classB = "ClassB"
        case classC = "ClassC"
        public var description: String { return self.rawValue }
    }

    public enum DownlinkMode: String, CustomStringConvertible, Codable, _SotoSendable {
        case concurrent = "CONCURRENT"
        case sequential = "SEQUENTIAL"
        case usingUplinkGateway = "USING_UPLINK_GATEWAY"
        public var description: String { return self.rawValue }
    }

    public enum Event: String, CustomStringConvertible, Codable, _SotoSendable {
        case ack
        case discovered
        case lost
        case nack
        case passthrough
        public var description: String { return self.rawValue }
    }

    public enum EventNotificationPartnerType: String, CustomStringConvertible, Codable, _SotoSendable {
        case sidewalk = "Sidewalk"
        public var description: String { return self.rawValue }
    }

    public enum EventNotificationResourceType: String, CustomStringConvertible, Codable, _SotoSendable {
        case sidewalkAccount = "SidewalkAccount"
        case wirelessDevice = "WirelessDevice"
        case wirelessGateway = "WirelessGateway"
        public var description: String { return self.rawValue }
    }

    public enum EventNotificationTopicStatus: String, CustomStringConvertible, Codable, _SotoSendable {
        case disabled = "Disabled"
        case enabled = "Enabled"
        public var description: String { return self.rawValue }
    }

    public enum ExpressionType: String, CustomStringConvertible, Codable, _SotoSendable {
        case mqttTopic = "MqttTopic"
        case ruleName = "RuleName"
        public var description: String { return self.rawValue }
    }

    public enum FuotaDeviceStatus: String, CustomStringConvertible, Codable, _SotoSendable {
        case fragAlgoUnsupported = "FragAlgo_unsupported"
        case fragIndexUnsupported = "FragIndex_unsupported"
        case initial = "Initial"
        case memoryError = "MemoryError"
        case micError = "MICError"
        case missingFrag = "MissingFrag"
        case notEnoughMemory = "Not_enough_memory"
        case packageNotSupported = "Package_Not_Supported"
        case sessionCntReplay = "SessionCnt_replay"
        case successful = "Successful"
        case wrongDescriptor = "Wrong_descriptor"
        public var description: String { return self.rawValue }
    }

    public enum FuotaTaskStatus: String, CustomStringConvertible, Codable, _SotoSendable {
        case deleteWaiting = "Delete_Waiting"
        case fuotaDone = "FuotaDone"
        case fuotaSessionWaiting = "FuotaSession_Waiting"
        case inFuotasession = "In_FuotaSession"
        case pending = "Pending"
        public var description: String { return self.rawValue }
    }

    public enum IdentifierType: String, CustomStringConvertible, Codable, _SotoSendable {
        case devEui = "DevEui"
        case gatewayEui = "GatewayEui"
        case partnerAccountId = "PartnerAccountId"
        case wirelessDeviceId = "WirelessDeviceId"
        case wirelessGatewayId = "WirelessGatewayId"
        public var description: String { return self.rawValue }
    }

    public enum LogLevel: String, CustomStringConvertible, Codable, _SotoSendable {
        case disabled = "DISABLED"
        case error = "ERROR"
        case info = "INFO"
        public var description: String { return self.rawValue }
    }

    public enum MessageType: String, CustomStringConvertible, Codable, _SotoSendable {
        case customCommandIdGet = "CUSTOM_COMMAND_ID_GET"
        case customCommandIdNotify = "CUSTOM_COMMAND_ID_NOTIFY"
        case customCommandIdResp = "CUSTOM_COMMAND_ID_RESP"
        case customCommandIdSet = "CUSTOM_COMMAND_ID_SET"
        public var description: String { return self.rawValue }
    }

    public enum PartnerType: String, CustomStringConvertible, Codable, _SotoSendable {
        case sidewalk = "Sidewalk"
        public var description: String { return self.rawValue }
    }

    public enum PositionConfigurationFec: String, CustomStringConvertible, Codable, _SotoSendable {
        case none = "NONE"
        case rose = "ROSE"
        public var description: String { return self.rawValue }
    }

    public enum PositionConfigurationStatus: String, CustomStringConvertible, Codable, _SotoSendable {
        case disabled = "Disabled"
        case enabled = "Enabled"
        public var description: String { return self.rawValue }
    }

    public enum PositionResourceType: String, CustomStringConvertible, Codable, _SotoSendable {
        case wirelessDevice = "WirelessDevice"
        case wirelessGateway = "WirelessGateway"
        public var description: String { return self.rawValue }
    }

    public enum PositionSolverProvider: String, CustomStringConvertible, Codable, _SotoSendable {
        case semtech = "Semtech"
        public var description: String { return self.rawValue }
    }

    public enum PositionSolverType: String, CustomStringConvertible, Codable, _SotoSendable {
        case gnss = "GNSS"
        public var description: String { return self.rawValue }
    }

    public enum PositioningConfigStatus: String, CustomStringConvertible, Codable, _SotoSendable {
        case disabled = "Disabled"
        case enabled = "Enabled"
        public var description: String { return self.rawValue }
    }

    public enum SigningAlg: String, CustomStringConvertible, Codable, _SotoSendable {
        case ed25519 = "Ed25519"
        case p256r1 = "P256r1"
        public var description: String { return self.rawValue }
    }

    public enum SupportedRfRegion: String, CustomStringConvertible, Codable, _SotoSendable {
        case as9231 = "AS923-1"
        case au915 = "AU915"
        case eu868 = "EU868"
        case us915 = "US915"
        public var description: String { return self.rawValue }
    }

    public enum WirelessDeviceEvent: String, CustomStringConvertible, Codable, _SotoSendable {
        case downlinkData = "Downlink_Data"
        case join = "Join"
        case registration = "Registration"
        case rejoin = "Rejoin"
        case uplinkData = "Uplink_Data"
        public var description: String { return self.rawValue }
    }

    public enum WirelessDeviceFrameInfo: String, CustomStringConvertible, Codable, _SotoSendable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum WirelessDeviceIdType: String, CustomStringConvertible, Codable, _SotoSendable {
        case devEui = "DevEui"
        case sidewalkManufacturingSn = "SidewalkManufacturingSn"
        case thingName = "ThingName"
        case wirelessDeviceId = "WirelessDeviceId"
        public var description: String { return self.rawValue }
    }

    public enum WirelessDeviceType: String, CustomStringConvertible, Codable, _SotoSendable {
        case loRaWAN = "LoRaWAN"
        case sidewalk = "Sidewalk"
        public var description: String { return self.rawValue }
    }

    public enum WirelessGatewayEvent: String, CustomStringConvertible, Codable, _SotoSendable {
        case certificate = "Certificate"
        case cupsRequest = "CUPS_Request"
        public var description: String { return self.rawValue }
    }

    public enum WirelessGatewayIdType: String, CustomStringConvertible, Codable, _SotoSendable {
        case gatewayEui = "GatewayEui"
        case thingName = "ThingName"
        case wirelessGatewayId = "WirelessGatewayId"
        public var description: String { return self.rawValue }
    }

    public enum WirelessGatewayServiceType: String, CustomStringConvertible, Codable, _SotoSendable {
        case cups = "CUPS"
        case lns = "LNS"
        public var description: String { return self.rawValue }
    }

    public enum WirelessGatewayTaskDefinitionType: String, CustomStringConvertible, Codable, _SotoSendable {
        case update = "UPDATE"
        public var description: String { return self.rawValue }
    }

    public enum WirelessGatewayTaskStatus: String, CustomStringConvertible, Codable, _SotoSendable {
        case completed = "COMPLETED"
        case failed = "FAILED"
        case firstRetry = "FIRST_RETRY"
        case inProgress = "IN_PROGRESS"
        case pending = "PENDING"
        case secondRetry = "SECOND_RETRY"
        public var description: String { return self.rawValue }
    }

    public enum WirelessGatewayType: String, CustomStringConvertible, Codable, _SotoSendable {
        case loRaWAN = "LoRaWAN"
        public var description: String { return self.rawValue }
    }

    // MARK: Shapes

    public struct AbpV10X: AWSEncodableShape & AWSDecodableShape {
        /// The DevAddr value.
        public let devAddr: String?
        /// The FCnt init value.
        public let fCntStart: Int?
        /// Session keys for ABP v1.0.x
        public let sessionKeys: SessionKeysAbpV10X?

        public init(devAddr: String? = nil, fCntStart: Int? = nil, sessionKeys: SessionKeysAbpV10X? = nil) {
            self.devAddr = devAddr
            self.fCntStart = fCntStart
            self.sessionKeys = sessionKeys
        }

        public func validate(name: String) throws {
            try self.validate(self.devAddr, name: "devAddr", parent: name, pattern: "^[a-fA-F0-9]{8}$")
            try self.validate(self.fCntStart, name: "fCntStart", parent: name, max: 65535)
            try self.validate(self.fCntStart, name: "fCntStart", parent: name, min: 0)
            try self.sessionKeys?.validate(name: "\(name).sessionKeys")
        }

        private enum CodingKeys: String, CodingKey {
            case devAddr = "DevAddr"
            case fCntStart = "FCntStart"
            case sessionKeys = "SessionKeys"
        }
    }

    public struct AbpV11: AWSEncodableShape & AWSDecodableShape {
        /// The DevAddr value.
        public let devAddr: String?
        /// The FCnt init value.
        public let fCntStart: Int?
        /// Session keys for ABP v1.1
        public let sessionKeys: SessionKeysAbpV11?

        public init(devAddr: String? = nil, fCntStart: Int? = nil, sessionKeys: SessionKeysAbpV11? = nil) {
            self.devAddr = devAddr
            self.fCntStart = fCntStart
            self.sessionKeys = sessionKeys
        }

        public func validate(name: String) throws {
            try self.validate(self.devAddr, name: "devAddr", parent: name, pattern: "^[a-fA-F0-9]{8}$")
            try self.validate(self.fCntStart, name: "fCntStart", parent: name, max: 65535)
            try self.validate(self.fCntStart, name: "fCntStart", parent: name, min: 0)
            try self.sessionKeys?.validate(name: "\(name).sessionKeys")
        }

        private enum CodingKeys: String, CodingKey {
            case devAddr = "DevAddr"
            case fCntStart = "FCntStart"
            case sessionKeys = "SessionKeys"
        }
    }

    public struct Accuracy: AWSDecodableShape {
        /// The horizontal accuracy of the estimated position, which is the difference between the estimated location and the actual device location.
        public let horizontalAccuracy: Float?
        /// The vertical accuracy of the estimated position, which is the difference between the estimated altitude and actual device latitude in meters.
        public let verticalAccuracy: Float?

        public init(horizontalAccuracy: Float? = nil, verticalAccuracy: Float? = nil) {
            self.horizontalAccuracy = horizontalAccuracy
            self.verticalAccuracy = verticalAccuracy
        }

        private enum CodingKeys: String, CodingKey {
            case horizontalAccuracy = "HorizontalAccuracy"
            case verticalAccuracy = "VerticalAccuracy"
        }
    }

    public struct ApplicationConfig: AWSEncodableShape & AWSDecodableShape {
        /// The name of the position data destination that describes the AWS IoT rule that processes the device's position data for use by AWS IoT Core for LoRaWAN.
        public let destinationName: String?
        public let fPort: Int?
        /// Application type, which can be specified to obtain real-time position information of your LoRaWAN device.
        public let type: ApplicationConfigType?

        public init(destinationName: String? = nil, fPort: Int? = nil, type: ApplicationConfigType? = nil) {
            self.destinationName = destinationName
            self.fPort = fPort
            self.type = type
        }

        public func validate(name: String) throws {
            try self.validate(self.destinationName, name: "destinationName", parent: name, max: 128)
            try self.validate(self.destinationName, name: "destinationName", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.fPort, name: "fPort", parent: name, max: 223)
            try self.validate(self.fPort, name: "fPort", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case destinationName = "DestinationName"
            case fPort = "FPort"
            case type = "Type"
        }
    }

    public struct AssociateAwsAccountWithPartnerAccountRequest: AWSEncodableShape {
        /// Each resource must have a unique client request token. If you try to create a new resource with the same token as a resource that already exists, an exception occurs. If you omit this value, AWS SDKs will automatically generate a unique client request.
        public let clientRequestToken: String?
        /// The Sidewalk account credentials.
        public let sidewalk: SidewalkAccountInfo
        /// The tags to attach to the specified resource. Tags are metadata that you can use to manage a resource.
        public let tags: [Tag]?

        public init(clientRequestToken: String? = AssociateAwsAccountWithPartnerAccountRequest.idempotencyToken(), sidewalk: SidewalkAccountInfo, tags: [Tag]? = nil) {
            self.clientRequestToken = clientRequestToken
            self.sidewalk = sidewalk
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.sidewalk.validate(name: "\(name).sidewalk")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case sidewalk = "Sidewalk"
            case tags = "Tags"
        }
    }

    public struct AssociateAwsAccountWithPartnerAccountResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The Sidewalk account credentials.
        public let sidewalk: SidewalkAccountInfo?

        public init(arn: String? = nil, sidewalk: SidewalkAccountInfo? = nil) {
            self.arn = arn
            self.sidewalk = sidewalk
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case sidewalk = "Sidewalk"
        }
    }

    public struct AssociateMulticastGroupWithFuotaTaskRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        public let id: String
        public let multicastGroupId: String

        public init(id: String, multicastGroupId: String) {
            self.id = id
            self.multicastGroupId = multicastGroupId
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.multicastGroupId, name: "multicastGroupId", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case multicastGroupId = "MulticastGroupId"
        }
    }

    public struct AssociateMulticastGroupWithFuotaTaskResponse: AWSDecodableShape {
        public init() {}
    }

    public struct AssociateWirelessDeviceWithFuotaTaskRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        public let id: String
        public let wirelessDeviceId: String

        public init(id: String, wirelessDeviceId: String) {
            self.id = id
            self.wirelessDeviceId = wirelessDeviceId
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.wirelessDeviceId, name: "wirelessDeviceId", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case wirelessDeviceId = "WirelessDeviceId"
        }
    }

    public struct AssociateWirelessDeviceWithFuotaTaskResponse: AWSDecodableShape {
        public init() {}
    }

    public struct AssociateWirelessDeviceWithMulticastGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        public let id: String
        public let wirelessDeviceId: String

        public init(id: String, wirelessDeviceId: String) {
            self.id = id
            self.wirelessDeviceId = wirelessDeviceId
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.wirelessDeviceId, name: "wirelessDeviceId", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case wirelessDeviceId = "WirelessDeviceId"
        }
    }

    public struct AssociateWirelessDeviceWithMulticastGroupResponse: AWSDecodableShape {
        public init() {}
    }

    public struct AssociateWirelessDeviceWithThingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to update.
        public let id: String
        /// The ARN of the thing to associate with the wireless device.
        public let thingArn: String

        public init(id: String, thingArn: String) {
            self.id = id
            self.thingArn = thingArn
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case thingArn = "ThingArn"
        }
    }

    public struct AssociateWirelessDeviceWithThingResponse: AWSDecodableShape {
        public init() {}
    }

    public struct AssociateWirelessGatewayWithCertificateRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to update.
        public let id: String
        /// The ID of the certificate to associate with the wireless gateway.
        public let iotCertificateId: String

        public init(id: String, iotCertificateId: String) {
            self.id = id
            self.iotCertificateId = iotCertificateId
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.iotCertificateId, name: "iotCertificateId", parent: name, max: 4096)
            try self.validate(self.iotCertificateId, name: "iotCertificateId", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case iotCertificateId = "IotCertificateId"
        }
    }

    public struct AssociateWirelessGatewayWithCertificateResponse: AWSDecodableShape {
        /// The ID of the certificate associated with the wireless gateway.
        public let iotCertificateId: String?

        public init(iotCertificateId: String? = nil) {
            self.iotCertificateId = iotCertificateId
        }

        private enum CodingKeys: String, CodingKey {
            case iotCertificateId = "IotCertificateId"
        }
    }

    public struct AssociateWirelessGatewayWithThingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to update.
        public let id: String
        /// The ARN of the thing to associate with the wireless gateway.
        public let thingArn: String

        public init(id: String, thingArn: String) {
            self.id = id
            self.thingArn = thingArn
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case thingArn = "ThingArn"
        }
    }

    public struct AssociateWirelessGatewayWithThingResponse: AWSDecodableShape {
        public init() {}
    }

    public struct Beaconing: AWSEncodableShape & AWSDecodableShape {
        /// The data rate for gateways that are sending the beacons.
        public let dataRate: Int?
        /// The frequency list for the gateways to send the beacons.
        public let frequencies: [Int]?

        public init(dataRate: Int? = nil, frequencies: [Int]? = nil) {
            self.dataRate = dataRate
            self.frequencies = frequencies
        }

        public func validate(name: String) throws {
            try self.validate(self.dataRate, name: "dataRate", parent: name, max: 15)
            try self.validate(self.dataRate, name: "dataRate", parent: name, min: 0)
            try self.frequencies?.forEach {
                try validate($0, name: "frequencies[]", parent: name, max: 1_000_000_000)
                try validate($0, name: "frequencies[]", parent: name, min: 100_000_000)
            }
            try self.validate(self.frequencies, name: "frequencies", parent: name, max: 10)
        }

        private enum CodingKeys: String, CodingKey {
            case dataRate = "DataRate"
            case frequencies = "Frequencies"
        }
    }

    public struct CancelMulticastGroupSessionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct CancelMulticastGroupSessionResponse: AWSDecodableShape {
        public init() {}
    }

    public struct CdmaLocalId: AWSEncodableShape {
        /// CDMA channel information.
        public let cdmaChannel: Int
        /// Pseudo-noise offset, which is a characteristic of the signal from a cell on a radio tower.
        public let pnOffset: Int

        public init(cdmaChannel: Int, pnOffset: Int) {
            self.cdmaChannel = cdmaChannel
            self.pnOffset = pnOffset
        }

        public func validate(name: String) throws {
            try self.validate(self.cdmaChannel, name: "cdmaChannel", parent: name, max: 4095)
            try self.validate(self.cdmaChannel, name: "cdmaChannel", parent: name, min: 0)
            try self.validate(self.pnOffset, name: "pnOffset", parent: name, max: 511)
            try self.validate(self.pnOffset, name: "pnOffset", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case cdmaChannel = "CdmaChannel"
            case pnOffset = "PnOffset"
        }
    }

    public struct CdmaNmrObj: AWSEncodableShape {
        /// CDMA base station ID (BSID).
        public let baseStationId: Int?
        /// CDMA channel information.
        public let cdmaChannel: Int
        /// Transmit power level of the pilot signal, measured in dBm (decibel-milliwatts).
        public let pilotPower: Int?
        /// Pseudo-noise offset, which is a characteristic of the signal from a cell on a radio tower.
        public let pnOffset: Int

        public init(baseStationId: Int? = nil, cdmaChannel: Int, pilotPower: Int? = nil, pnOffset: Int) {
            self.baseStationId = baseStationId
            self.cdmaChannel = cdmaChannel
            self.pilotPower = pilotPower
            self.pnOffset = pnOffset
        }

        public func validate(name: String) throws {
            try self.validate(self.baseStationId, name: "baseStationId", parent: name, max: 65535)
            try self.validate(self.baseStationId, name: "baseStationId", parent: name, min: 0)
            try self.validate(self.cdmaChannel, name: "cdmaChannel", parent: name, max: 4095)
            try self.validate(self.cdmaChannel, name: "cdmaChannel", parent: name, min: 0)
            try self.validate(self.pilotPower, name: "pilotPower", parent: name, max: -49)
            try self.validate(self.pilotPower, name: "pilotPower", parent: name, min: -142)
            try self.validate(self.pnOffset, name: "pnOffset", parent: name, max: 511)
            try self.validate(self.pnOffset, name: "pnOffset", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case baseStationId = "BaseStationId"
            case cdmaChannel = "CdmaChannel"
            case pilotPower = "PilotPower"
            case pnOffset = "PnOffset"
        }
    }

    public struct CdmaObj: AWSEncodableShape {
        /// CDMA base station latitude in degrees.
        public let baseLat: Float?
        /// CDMA base station longtitude in degrees.
        public let baseLng: Float?
        /// CDMA base station ID (BSID).
        public let baseStationId: Int
        /// CDMA local identification (local ID) parameters.
        public let cdmaLocalId: CdmaLocalId?
        /// CDMA network measurement reports.
        public let cdmaNmr: [CdmaNmrObj]?
        /// CDMA network ID (NID).
        public let networkId: Int
        /// Transmit power level of the pilot signal, measured in dBm (decibel-milliwatts).
        public let pilotPower: Int?
        /// CDMA registration zone (RZ).
        public let registrationZone: Int?
        /// CDMA system ID (SID).
        public let systemId: Int

        public init(baseLat: Float? = nil, baseLng: Float? = nil, baseStationId: Int, cdmaLocalId: CdmaLocalId? = nil, cdmaNmr: [CdmaNmrObj]? = nil, networkId: Int, pilotPower: Int? = nil, registrationZone: Int? = nil, systemId: Int) {
            self.baseLat = baseLat
            self.baseLng = baseLng
            self.baseStationId = baseStationId
            self.cdmaLocalId = cdmaLocalId
            self.cdmaNmr = cdmaNmr
            self.networkId = networkId
            self.pilotPower = pilotPower
            self.registrationZone = registrationZone
            self.systemId = systemId
        }

        public func validate(name: String) throws {
            try self.validate(self.baseLat, name: "baseLat", parent: name, max: 90.0)
            try self.validate(self.baseLat, name: "baseLat", parent: name, min: -90.0)
            try self.validate(self.baseLng, name: "baseLng", parent: name, max: 180.0)
            try self.validate(self.baseLng, name: "baseLng", parent: name, min: -180.0)
            try self.validate(self.baseStationId, name: "baseStationId", parent: name, max: 65535)
            try self.validate(self.baseStationId, name: "baseStationId", parent: name, min: 0)
            try self.cdmaLocalId?.validate(name: "\(name).cdmaLocalId")
            try self.cdmaNmr?.forEach {
                try $0.validate(name: "\(name).cdmaNmr[]")
            }
            try self.validate(self.cdmaNmr, name: "cdmaNmr", parent: name, max: 32)
            try self.validate(self.cdmaNmr, name: "cdmaNmr", parent: name, min: 1)
            try self.validate(self.networkId, name: "networkId", parent: name, max: 65535)
            try self.validate(self.networkId, name: "networkId", parent: name, min: 0)
            try self.validate(self.pilotPower, name: "pilotPower", parent: name, max: -49)
            try self.validate(self.pilotPower, name: "pilotPower", parent: name, min: -142)
            try self.validate(self.registrationZone, name: "registrationZone", parent: name, max: 4095)
            try self.validate(self.registrationZone, name: "registrationZone", parent: name, min: 0)
            try self.validate(self.systemId, name: "systemId", parent: name, max: 32767)
            try self.validate(self.systemId, name: "systemId", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case baseLat = "BaseLat"
            case baseLng = "BaseLng"
            case baseStationId = "BaseStationId"
            case cdmaLocalId = "CdmaLocalId"
            case cdmaNmr = "CdmaNmr"
            case networkId = "NetworkId"
            case pilotPower = "PilotPower"
            case registrationZone = "RegistrationZone"
            case systemId = "SystemId"
        }
    }

    public struct CellTowers: AWSEncodableShape {
        /// CDMA object information.
        public let cdma: [CdmaObj]?
        /// GSM object information.
        public let gsm: [GsmObj]?
        /// LTE object information.
        public let lte: [LteObj]?
        /// TD-SCDMA object information.
        public let tdscdma: [TdscdmaObj]?
        /// WCDMA object information.
        public let wcdma: [WcdmaObj]?

        public init(cdma: [CdmaObj]? = nil, gsm: [GsmObj]? = nil, lte: [LteObj]? = nil, tdscdma: [TdscdmaObj]? = nil, wcdma: [WcdmaObj]? = nil) {
            self.cdma = cdma
            self.gsm = gsm
            self.lte = lte
            self.tdscdma = tdscdma
            self.wcdma = wcdma
        }

        public func validate(name: String) throws {
            try self.cdma?.forEach {
                try $0.validate(name: "\(name).cdma[]")
            }
            try self.validate(self.cdma, name: "cdma", parent: name, max: 16)
            try self.validate(self.cdma, name: "cdma", parent: name, min: 1)
            try self.gsm?.forEach {
                try $0.validate(name: "\(name).gsm[]")
            }
            try self.validate(self.gsm, name: "gsm", parent: name, max: 16)
            try self.validate(self.gsm, name: "gsm", parent: name, min: 1)
            try self.lte?.forEach {
                try $0.validate(name: "\(name).lte[]")
            }
            try self.validate(self.lte, name: "lte", parent: name, max: 16)
            try self.validate(self.lte, name: "lte", parent: name, min: 1)
            try self.tdscdma?.forEach {
                try $0.validate(name: "\(name).tdscdma[]")
            }
            try self.validate(self.tdscdma, name: "tdscdma", parent: name, max: 16)
            try self.validate(self.tdscdma, name: "tdscdma", parent: name, min: 1)
            try self.wcdma?.forEach {
                try $0.validate(name: "\(name).wcdma[]")
            }
            try self.validate(self.wcdma, name: "wcdma", parent: name, max: 16)
            try self.validate(self.wcdma, name: "wcdma", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case cdma = "Cdma"
            case gsm = "Gsm"
            case lte = "Lte"
            case tdscdma = "Tdscdma"
            case wcdma = "Wcdma"
        }
    }

    public struct CertificateList: AWSDecodableShape {
        /// The certificate chain algorithm provided by sidewalk.
        public let signingAlg: SigningAlg
        /// The value of the chosen sidewalk certificate.
        public let value: String

        public init(signingAlg: SigningAlg, value: String) {
            self.signingAlg = signingAlg
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case signingAlg = "SigningAlg"
            case value = "Value"
        }
    }

    public struct ConnectionStatusEventConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Connection status event configuration object for enabling or disabling LoRaWAN related event topics.
        public let loRaWAN: LoRaWANConnectionStatusEventNotificationConfigurations?
        /// Denotes whether the wireless gateway ID connection status event topic is enabled or disabled.
        public let wirelessGatewayIdEventTopic: EventNotificationTopicStatus?

        public init(loRaWAN: LoRaWANConnectionStatusEventNotificationConfigurations? = nil, wirelessGatewayIdEventTopic: EventNotificationTopicStatus? = nil) {
            self.loRaWAN = loRaWAN
            self.wirelessGatewayIdEventTopic = wirelessGatewayIdEventTopic
        }

        private enum CodingKeys: String, CodingKey {
            case loRaWAN = "LoRaWAN"
            case wirelessGatewayIdEventTopic = "WirelessGatewayIdEventTopic"
        }
    }

    public struct ConnectionStatusResourceTypeEventConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Connection status resource type event configuration object for enabling or disabling LoRaWAN related event topics.
        public let loRaWAN: LoRaWANConnectionStatusResourceTypeEventConfiguration?

        public init(loRaWAN: LoRaWANConnectionStatusResourceTypeEventConfiguration? = nil) {
            self.loRaWAN = loRaWAN
        }

        private enum CodingKeys: String, CodingKey {
            case loRaWAN = "LoRaWAN"
        }
    }

    public struct CreateDestinationRequest: AWSEncodableShape {
        /// Each resource must have a unique client request token. If you try to create a new resource with the same token as a resource that already exists, an exception occurs. If you omit this value, AWS SDKs will automatically generate a unique client request.
        public let clientRequestToken: String?
        /// The description of the new resource.
        public let description: String?
        /// The rule name or topic rule to send messages to.
        public let expression: String
        /// The type of value in Expression.
        public let expressionType: ExpressionType
        /// The name of the new resource.
        public let name: String
        /// The ARN of the IAM Role that authorizes the destination.
        public let roleArn: String
        /// The tags to attach to the new destination. Tags are metadata that you can use to manage a resource.
        public let tags: [Tag]?

        public init(clientRequestToken: String? = CreateDestinationRequest.idempotencyToken(), description: String? = nil, expression: String, expressionType: ExpressionType, name: String, roleArn: String, tags: [Tag]? = nil) {
            self.clientRequestToken = clientRequestToken
            self.description = description
            self.expression = expression
            self.expressionType = expressionType
            self.name = name
            self.roleArn = roleArn
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.validate(self.expression, name: "expression", parent: name, max: 2048)
            try self.validate(self.name, name: "name", parent: name, max: 128)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.roleArn, name: "roleArn", parent: name, max: 2048)
            try self.validate(self.roleArn, name: "roleArn", parent: name, min: 20)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case description = "Description"
            case expression = "Expression"
            case expressionType = "ExpressionType"
            case name = "Name"
            case roleArn = "RoleArn"
            case tags = "Tags"
        }
    }

    public struct CreateDestinationResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the new resource.
        public let arn: String?
        /// The name of the new resource.
        public let name: String?

        public init(arn: String? = nil, name: String? = nil) {
            self.arn = arn
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case name = "Name"
        }
    }

    public struct CreateDeviceProfileRequest: AWSEncodableShape {
        /// Each resource must have a unique client request token. If you try to create a new resource with the same token as a resource that already exists, an exception occurs. If you omit this value, AWS SDKs will automatically generate a unique client request.
        public let clientRequestToken: String?
        /// The device profile information to use to create the device profile.
        public let loRaWAN: LoRaWANDeviceProfile?
        /// The name of the new resource.
        public let name: String?
        /// The tags to attach to the new device profile. Tags are metadata that you can use to manage a resource.
        public let tags: [Tag]?

        public init(clientRequestToken: String? = CreateDeviceProfileRequest.idempotencyToken(), loRaWAN: LoRaWANDeviceProfile? = nil, name: String? = nil, tags: [Tag]? = nil) {
            self.clientRequestToken = clientRequestToken
            self.loRaWAN = loRaWAN
            self.name = name
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.loRaWAN?.validate(name: "\(name).loRaWAN")
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case tags = "Tags"
        }
    }

    public struct CreateDeviceProfileResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the new resource.
        public let arn: String?
        /// The ID of the new device profile.
        public let id: String?

        public init(arn: String? = nil, id: String? = nil) {
            self.arn = arn
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
        }
    }

    public struct CreateFuotaTaskRequest: AWSEncodableShape {
        public let clientRequestToken: String?
        public let description: String?
        public let firmwareUpdateImage: String
        public let firmwareUpdateRole: String
        public let loRaWAN: LoRaWANFuotaTask?
        public let name: String?
        public let tags: [Tag]?

        public init(clientRequestToken: String? = CreateFuotaTaskRequest.idempotencyToken(), description: String? = nil, firmwareUpdateImage: String, firmwareUpdateRole: String, loRaWAN: LoRaWANFuotaTask? = nil, name: String? = nil, tags: [Tag]? = nil) {
            self.clientRequestToken = clientRequestToken
            self.description = description
            self.firmwareUpdateImage = firmwareUpdateImage
            self.firmwareUpdateRole = firmwareUpdateRole
            self.loRaWAN = loRaWAN
            self.name = name
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.validate(self.firmwareUpdateImage, name: "firmwareUpdateImage", parent: name, max: 4096)
            try self.validate(self.firmwareUpdateImage, name: "firmwareUpdateImage", parent: name, min: 1)
            try self.validate(self.firmwareUpdateRole, name: "firmwareUpdateRole", parent: name, max: 2048)
            try self.validate(self.firmwareUpdateRole, name: "firmwareUpdateRole", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case description = "Description"
            case firmwareUpdateImage = "FirmwareUpdateImage"
            case firmwareUpdateRole = "FirmwareUpdateRole"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case tags = "Tags"
        }
    }

    public struct CreateFuotaTaskResponse: AWSDecodableShape {
        public let arn: String?
        public let id: String?

        public init(arn: String? = nil, id: String? = nil) {
            self.arn = arn
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
        }
    }

    public struct CreateMulticastGroupRequest: AWSEncodableShape {
        /// Each resource must have a unique client request token. If you try to create a new resource with the same token as a resource that already exists, an exception occurs. If you omit this value, AWS SDKs will automatically generate a unique client request.
        public let clientRequestToken: String?
        /// The description of the multicast group.
        public let description: String?
        public let loRaWAN: LoRaWANMulticast
        public let name: String?
        public let tags: [Tag]?

        public init(clientRequestToken: String? = CreateMulticastGroupRequest.idempotencyToken(), description: String? = nil, loRaWAN: LoRaWANMulticast, name: String? = nil, tags: [Tag]? = nil) {
            self.clientRequestToken = clientRequestToken
            self.description = description
            self.loRaWAN = loRaWAN
            self.name = name
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case description = "Description"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case tags = "Tags"
        }
    }

    public struct CreateMulticastGroupResponse: AWSDecodableShape {
        public let arn: String?
        public let id: String?

        public init(arn: String? = nil, id: String? = nil) {
            self.arn = arn
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
        }
    }

    public struct CreateNetworkAnalyzerConfigurationRequest: AWSEncodableShape {
        public let clientRequestToken: String?
        public let description: String?
        public let name: String
        public let tags: [Tag]?
        public let traceContent: TraceContent?
        /// Wireless device resources to add to the network analyzer configuration. Provide the WirelessDeviceId of the resource to add in the input array.
        public let wirelessDevices: [String]?
        /// Wireless gateway resources to add to the network analyzer configuration. Provide the WirelessGatewayId of the resource to add in the input array.
        public let wirelessGateways: [String]?

        public init(clientRequestToken: String? = CreateNetworkAnalyzerConfigurationRequest.idempotencyToken(), description: String? = nil, name: String, tags: [Tag]? = nil, traceContent: TraceContent? = nil, wirelessDevices: [String]? = nil, wirelessGateways: [String]? = nil) {
            self.clientRequestToken = clientRequestToken
            self.description = description
            self.name = name
            self.tags = tags
            self.traceContent = traceContent
            self.wirelessDevices = wirelessDevices
            self.wirelessGateways = wirelessGateways
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.validate(self.name, name: "name", parent: name, max: 1024)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
            try self.wirelessDevices?.forEach {
                try validate($0, name: "wirelessDevices[]", parent: name, max: 256)
            }
            try self.validate(self.wirelessDevices, name: "wirelessDevices", parent: name, max: 250)
            try self.wirelessGateways?.forEach {
                try validate($0, name: "wirelessGateways[]", parent: name, max: 256)
            }
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case description = "Description"
            case name = "Name"
            case tags = "Tags"
            case traceContent = "TraceContent"
            case wirelessDevices = "WirelessDevices"
            case wirelessGateways = "WirelessGateways"
        }
    }

    public struct CreateNetworkAnalyzerConfigurationResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the new resource.
        public let arn: String?
        public let name: String?

        public init(arn: String? = nil, name: String? = nil) {
            self.arn = arn
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case name = "Name"
        }
    }

    public struct CreateServiceProfileRequest: AWSEncodableShape {
        /// Each resource must have a unique client request token. If you try to create a new resource with the same token as a resource that already exists, an exception occurs. If you omit this value, AWS SDKs will automatically generate a unique client request.
        public let clientRequestToken: String?
        /// The service profile information to use to create the service profile.
        public let loRaWAN: LoRaWANServiceProfile?
        /// The name of the new resource.
        public let name: String?
        /// The tags to attach to the new service profile. Tags are metadata that you can use to manage a resource.
        public let tags: [Tag]?

        public init(clientRequestToken: String? = CreateServiceProfileRequest.idempotencyToken(), loRaWAN: LoRaWANServiceProfile? = nil, name: String? = nil, tags: [Tag]? = nil) {
            self.clientRequestToken = clientRequestToken
            self.loRaWAN = loRaWAN
            self.name = name
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.loRaWAN?.validate(name: "\(name).loRaWAN")
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case tags = "Tags"
        }
    }

    public struct CreateServiceProfileResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the new resource.
        public let arn: String?
        /// The ID of the new service profile.
        public let id: String?

        public init(arn: String? = nil, id: String? = nil) {
            self.arn = arn
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
        }
    }

    public struct CreateWirelessDeviceRequest: AWSEncodableShape {
        /// Each resource must have a unique client request token. If you try to create a new resource with the same token as a resource that already exists, an exception occurs. If you omit this value, AWS SDKs will automatically generate a unique client request.
        public let clientRequestToken: String?
        /// The description of the new resource.
        public let description: String?
        /// The name of the destination to assign to the new wireless device.
        public let destinationName: String
        /// The device configuration information to use to create the wireless device.
        public let loRaWAN: LoRaWANDevice?
        /// The name of the new resource.
        public let name: String?
        /// FPort values for the GNSS, stream, and ClockSync functions of the positioning information.
        public let positioning: PositioningConfigStatus?
        /// The tags to attach to the new wireless device. Tags are metadata that you can use to manage a resource.
        public let tags: [Tag]?
        /// The wireless device type.
        public let type: WirelessDeviceType

        public init(clientRequestToken: String? = CreateWirelessDeviceRequest.idempotencyToken(), description: String? = nil, destinationName: String, loRaWAN: LoRaWANDevice? = nil, name: String? = nil, positioning: PositioningConfigStatus? = nil, tags: [Tag]? = nil, type: WirelessDeviceType) {
            self.clientRequestToken = clientRequestToken
            self.description = description
            self.destinationName = destinationName
            self.loRaWAN = loRaWAN
            self.name = name
            self.positioning = positioning
            self.tags = tags
            self.type = type
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.validate(self.destinationName, name: "destinationName", parent: name, max: 128)
            try self.validate(self.destinationName, name: "destinationName", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.loRaWAN?.validate(name: "\(name).loRaWAN")
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case description = "Description"
            case destinationName = "DestinationName"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case positioning = "Positioning"
            case tags = "Tags"
            case type = "Type"
        }
    }

    public struct CreateWirelessDeviceResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the new resource.
        public let arn: String?
        /// The ID of the new wireless device.
        public let id: String?

        public init(arn: String? = nil, id: String? = nil) {
            self.arn = arn
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
        }
    }

    public struct CreateWirelessGatewayRequest: AWSEncodableShape {
        /// Each resource must have a unique client request token. If you try to create a new resource with the same token as a resource that already exists, an exception occurs. If you omit this value, AWS SDKs will automatically generate a unique client request.
        public let clientRequestToken: String?
        /// The description of the new resource.
        public let description: String?
        /// The gateway configuration information to use to create the wireless gateway.
        public let loRaWAN: LoRaWANGateway
        /// The name of the new resource.
        public let name: String?
        /// The tags to attach to the new wireless gateway. Tags are metadata that you can use to manage a resource.
        public let tags: [Tag]?

        public init(clientRequestToken: String? = CreateWirelessGatewayRequest.idempotencyToken(), description: String? = nil, loRaWAN: LoRaWANGateway, name: String? = nil, tags: [Tag]? = nil) {
            self.clientRequestToken = clientRequestToken
            self.description = description
            self.loRaWAN = loRaWAN
            self.name = name
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.loRaWAN.validate(name: "\(name).loRaWAN")
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case description = "Description"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case tags = "Tags"
        }
    }

    public struct CreateWirelessGatewayResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the new resource.
        public let arn: String?
        /// The ID of the new wireless gateway.
        public let id: String?

        public init(arn: String? = nil, id: String? = nil) {
            self.arn = arn
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
        }
    }

    public struct CreateWirelessGatewayTaskDefinitionRequest: AWSEncodableShape {
        /// Whether to automatically create tasks using this task definition for all gateways with the specified current version. If false, the task must me created by calling CreateWirelessGatewayTask.
        public let autoCreateTasks: Bool
        /// Each resource must have a unique client request token. If you try to create a new resource with the same token as a resource that already exists, an exception occurs. If you omit this value, AWS SDKs will automatically generate a unique client request.
        public let clientRequestToken: String?
        /// The name of the new resource.
        public let name: String?
        /// The tags to attach to the specified resource. Tags are metadata that you can use to manage a resource.
        public let tags: [Tag]?
        /// Information about the gateways to update.
        public let update: UpdateWirelessGatewayTaskCreate?

        public init(autoCreateTasks: Bool = false, clientRequestToken: String? = CreateWirelessGatewayTaskDefinitionRequest.idempotencyToken(), name: String? = nil, tags: [Tag]? = nil, update: UpdateWirelessGatewayTaskCreate? = nil) {
            self.autoCreateTasks = autoCreateTasks
            self.clientRequestToken = clientRequestToken
            self.name = name
            self.tags = tags
            self.update = update
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.name, name: "name", parent: name, max: 2048)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
            try self.update?.validate(name: "\(name).update")
        }

        private enum CodingKeys: String, CodingKey {
            case autoCreateTasks = "AutoCreateTasks"
            case clientRequestToken = "ClientRequestToken"
            case name = "Name"
            case tags = "Tags"
            case update = "Update"
        }
    }

    public struct CreateWirelessGatewayTaskDefinitionResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The ID of the new wireless gateway task definition.
        public let id: String?

        public init(arn: String? = nil, id: String? = nil) {
            self.arn = arn
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
        }
    }

    public struct CreateWirelessGatewayTaskRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to update.
        public let id: String
        /// The ID of the WirelessGatewayTaskDefinition.
        public let wirelessGatewayTaskDefinitionId: String

        public init(id: String, wirelessGatewayTaskDefinitionId: String) {
            self.id = id
            self.wirelessGatewayTaskDefinitionId = wirelessGatewayTaskDefinitionId
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.wirelessGatewayTaskDefinitionId, name: "wirelessGatewayTaskDefinitionId", parent: name, max: 36)
            try self.validate(self.wirelessGatewayTaskDefinitionId, name: "wirelessGatewayTaskDefinitionId", parent: name, pattern: "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case wirelessGatewayTaskDefinitionId = "WirelessGatewayTaskDefinitionId"
        }
    }

    public struct CreateWirelessGatewayTaskResponse: AWSDecodableShape {
        /// The status of the request.
        public let status: WirelessGatewayTaskStatus?
        /// The ID of the WirelessGatewayTaskDefinition.
        public let wirelessGatewayTaskDefinitionId: String?

        public init(status: WirelessGatewayTaskStatus? = nil, wirelessGatewayTaskDefinitionId: String? = nil) {
            self.status = status
            self.wirelessGatewayTaskDefinitionId = wirelessGatewayTaskDefinitionId
        }

        private enum CodingKeys: String, CodingKey {
            case status = "Status"
            case wirelessGatewayTaskDefinitionId = "WirelessGatewayTaskDefinitionId"
        }
    }

    public struct DeleteDestinationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "name", location: .uri("Name"))
        ]

        /// The name of the resource to delete.
        public let name: String

        public init(name: String) {
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 128)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteDestinationResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteDeviceProfileRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to delete.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteDeviceProfileResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteFuotaTaskRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteFuotaTaskResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteMulticastGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteMulticastGroupResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteNetworkAnalyzerConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "configurationName", location: .uri("ConfigurationName"))
        ]

        public let configurationName: String

        public init(configurationName: String) {
            self.configurationName = configurationName
        }

        public func validate(name: String) throws {
            try self.validate(self.configurationName, name: "configurationName", parent: name, max: 1024)
            try self.validate(self.configurationName, name: "configurationName", parent: name, min: 1)
            try self.validate(self.configurationName, name: "configurationName", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteNetworkAnalyzerConfigurationResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteQueuedMessagesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id")),
            AWSMemberEncoding(label: "messageId", location: .querystring("messageId")),
            AWSMemberEncoding(label: "wirelessDeviceType", location: .querystring("WirelessDeviceType"))
        ]

        /// The ID of a given wireless device for which downlink messages will be deleted.
        public let id: String
        /// If message ID is "*", it cleares the entire downlink queue for a given device, specified by the wireless device ID. Otherwise, the downlink message with the specified message ID will be deleted.
        public let messageId: String
        /// The wireless device type, which can be either Sidewalk or LoRaWAN.
        public let wirelessDeviceType: WirelessDeviceType?

        public init(id: String, messageId: String, wirelessDeviceType: WirelessDeviceType? = nil) {
            self.id = id
            self.messageId = messageId
            self.wirelessDeviceType = wirelessDeviceType
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteQueuedMessagesResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteServiceProfileRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to delete.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteServiceProfileResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteWirelessDeviceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to delete.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteWirelessDeviceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteWirelessGatewayRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to delete.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteWirelessGatewayResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteWirelessGatewayTaskDefinitionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to delete.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 36)
            try self.validate(self.id, name: "id", parent: name, pattern: "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteWirelessGatewayTaskDefinitionResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteWirelessGatewayTaskRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to delete.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteWirelessGatewayTaskResponse: AWSDecodableShape {
        public init() {}
    }

    public struct Destinations: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The description of the resource.
        public let description: String?
        /// The rule name or topic rule to send messages to.
        public let expression: String?
        /// The type of value in Expression.
        public let expressionType: ExpressionType?
        /// The name of the resource.
        public let name: String?
        /// The ARN of the IAM Role that authorizes the destination.
        public let roleArn: String?

        public init(arn: String? = nil, description: String? = nil, expression: String? = nil, expressionType: ExpressionType? = nil, name: String? = nil, roleArn: String? = nil) {
            self.arn = arn
            self.description = description
            self.expression = expression
            self.expressionType = expressionType
            self.name = name
            self.roleArn = roleArn
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case description = "Description"
            case expression = "Expression"
            case expressionType = "ExpressionType"
            case name = "Name"
            case roleArn = "RoleArn"
        }
    }

    public struct DeviceProfile: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The ID of the device profile.
        public let id: String?
        /// The name of the resource.
        public let name: String?

        public init(arn: String? = nil, id: String? = nil, name: String? = nil) {
            self.arn = arn
            self.id = id
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
            case name = "Name"
        }
    }

    public struct DeviceRegistrationStateEventConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Device registration state event configuration object for enabling or disabling Sidewalk related event topics.
        public let sidewalk: SidewalkEventNotificationConfigurations?
        /// Denotes whether the wireless device ID device registration state event topic is enabled or disabled.
        public let wirelessDeviceIdEventTopic: EventNotificationTopicStatus?

        public init(sidewalk: SidewalkEventNotificationConfigurations? = nil, wirelessDeviceIdEventTopic: EventNotificationTopicStatus? = nil) {
            self.sidewalk = sidewalk
            self.wirelessDeviceIdEventTopic = wirelessDeviceIdEventTopic
        }

        private enum CodingKeys: String, CodingKey {
            case sidewalk = "Sidewalk"
            case wirelessDeviceIdEventTopic = "WirelessDeviceIdEventTopic"
        }
    }

    public struct DeviceRegistrationStateResourceTypeEventConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Device registration resource type state event configuration object for enabling or disabling Sidewalk related event topics.
        public let sidewalk: SidewalkResourceTypeEventConfiguration?

        public init(sidewalk: SidewalkResourceTypeEventConfiguration? = nil) {
            self.sidewalk = sidewalk
        }

        private enum CodingKeys: String, CodingKey {
            case sidewalk = "Sidewalk"
        }
    }

    public struct DisassociateAwsAccountFromPartnerAccountRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "partnerAccountId", location: .uri("PartnerAccountId")),
            AWSMemberEncoding(label: "partnerType", location: .querystring("partnerType"))
        ]

        /// The partner account ID to disassociate from the AWS account.
        public let partnerAccountId: String
        /// The partner type.
        public let partnerType: PartnerType

        public init(partnerAccountId: String, partnerType: PartnerType) {
            self.partnerAccountId = partnerAccountId
            self.partnerType = partnerType
        }

        public func validate(name: String) throws {
            try self.validate(self.partnerAccountId, name: "partnerAccountId", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociateAwsAccountFromPartnerAccountResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DisassociateMulticastGroupFromFuotaTaskRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id")),
            AWSMemberEncoding(label: "multicastGroupId", location: .uri("MulticastGroupId"))
        ]

        public let id: String
        public let multicastGroupId: String

        public init(id: String, multicastGroupId: String) {
            self.id = id
            self.multicastGroupId = multicastGroupId
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.multicastGroupId, name: "multicastGroupId", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociateMulticastGroupFromFuotaTaskResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DisassociateWirelessDeviceFromFuotaTaskRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id")),
            AWSMemberEncoding(label: "wirelessDeviceId", location: .uri("WirelessDeviceId"))
        ]

        public let id: String
        public let wirelessDeviceId: String

        public init(id: String, wirelessDeviceId: String) {
            self.id = id
            self.wirelessDeviceId = wirelessDeviceId
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.wirelessDeviceId, name: "wirelessDeviceId", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociateWirelessDeviceFromFuotaTaskResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DisassociateWirelessDeviceFromMulticastGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id")),
            AWSMemberEncoding(label: "wirelessDeviceId", location: .uri("WirelessDeviceId"))
        ]

        public let id: String
        public let wirelessDeviceId: String

        public init(id: String, wirelessDeviceId: String) {
            self.id = id
            self.wirelessDeviceId = wirelessDeviceId
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.wirelessDeviceId, name: "wirelessDeviceId", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociateWirelessDeviceFromMulticastGroupResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DisassociateWirelessDeviceFromThingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to update.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociateWirelessDeviceFromThingResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DisassociateWirelessGatewayFromCertificateRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to update.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociateWirelessGatewayFromCertificateResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DisassociateWirelessGatewayFromThingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to update.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociateWirelessGatewayFromThingResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DownlinkQueueMessage: AWSDecodableShape {
        public let loRaWAN: LoRaWANSendDataToDevice?
        ///  The message ID assigned by IoT Wireless to each downlink message, which helps identify the message.
        public let messageId: String?
        /// The time at which Iot Wireless received the downlink message.
        public let receivedAt: String?
        /// The transmit mode to use for sending data to the wireless device. This can be 0 for UM (unacknowledge mode) or 1 for AM (acknowledge mode).
        public let transmitMode: Int?

        public init(loRaWAN: LoRaWANSendDataToDevice? = nil, messageId: String? = nil, receivedAt: String? = nil, transmitMode: Int? = nil) {
            self.loRaWAN = loRaWAN
            self.messageId = messageId
            self.receivedAt = receivedAt
            self.transmitMode = transmitMode
        }

        private enum CodingKeys: String, CodingKey {
            case loRaWAN = "LoRaWAN"
            case messageId = "MessageId"
            case receivedAt = "ReceivedAt"
            case transmitMode = "TransmitMode"
        }
    }

    public struct EventConfigurationItem: AWSDecodableShape {
        public let events: EventNotificationItemConfigurations?
        /// Resource identifier opted in for event messaging.
        public let identifier: String?
        /// Identifier type of the particular resource identifier for event configuration.
        public let identifierType: IdentifierType?
        /// Partner type of the resource if the identifier type is PartnerAccountId.
        public let partnerType: EventNotificationPartnerType?

        public init(events: EventNotificationItemConfigurations? = nil, identifier: String? = nil, identifierType: IdentifierType? = nil, partnerType: EventNotificationPartnerType? = nil) {
            self.events = events
            self.identifier = identifier
            self.identifierType = identifierType
            self.partnerType = partnerType
        }

        private enum CodingKeys: String, CodingKey {
            case events = "Events"
            case identifier = "Identifier"
            case identifierType = "IdentifierType"
            case partnerType = "PartnerType"
        }
    }

    public struct EventNotificationItemConfigurations: AWSDecodableShape {
        /// Connection status event configuration for an event configuration item.
        public let connectionStatus: ConnectionStatusEventConfiguration?
        /// Device registration state event configuration for an event configuration item.
        public let deviceRegistrationState: DeviceRegistrationStateEventConfiguration?
        /// Join event configuration for an event configuration item.
        public let join: JoinEventConfiguration?
        /// Message delivery status event configuration for an event configuration item.
        public let messageDeliveryStatus: MessageDeliveryStatusEventConfiguration?
        /// Proximity event configuration for an event configuration item.
        public let proximity: ProximityEventConfiguration?

        public init(connectionStatus: ConnectionStatusEventConfiguration? = nil, deviceRegistrationState: DeviceRegistrationStateEventConfiguration? = nil, join: JoinEventConfiguration? = nil, messageDeliveryStatus: MessageDeliveryStatusEventConfiguration? = nil, proximity: ProximityEventConfiguration? = nil) {
            self.connectionStatus = connectionStatus
            self.deviceRegistrationState = deviceRegistrationState
            self.join = join
            self.messageDeliveryStatus = messageDeliveryStatus
            self.proximity = proximity
        }

        private enum CodingKeys: String, CodingKey {
            case connectionStatus = "ConnectionStatus"
            case deviceRegistrationState = "DeviceRegistrationState"
            case join = "Join"
            case messageDeliveryStatus = "MessageDeliveryStatus"
            case proximity = "Proximity"
        }
    }

    public struct FPorts: AWSEncodableShape & AWSDecodableShape {
        /// Optional LoRaWAN application information, which can be used for geolocation.
        public let applications: [ApplicationConfig]?
        public let clockSync: Int?
        public let fuota: Int?
        public let multicast: Int?
        /// FPort values for the GNSS, stream, and ClockSync functions of the positioning information.
        public let positioning: Positioning?

        public init(applications: [ApplicationConfig]? = nil, clockSync: Int? = nil, fuota: Int? = nil, multicast: Int? = nil, positioning: Positioning? = nil) {
            self.applications = applications
            self.clockSync = clockSync
            self.fuota = fuota
            self.multicast = multicast
            self.positioning = positioning
        }

        public func validate(name: String) throws {
            try self.applications?.forEach {
                try $0.validate(name: "\(name).applications[]")
            }
            try self.validate(self.clockSync, name: "clockSync", parent: name, max: 223)
            try self.validate(self.clockSync, name: "clockSync", parent: name, min: 1)
            try self.validate(self.fuota, name: "fuota", parent: name, max: 223)
            try self.validate(self.fuota, name: "fuota", parent: name, min: 1)
            try self.validate(self.multicast, name: "multicast", parent: name, max: 223)
            try self.validate(self.multicast, name: "multicast", parent: name, min: 1)
            try self.positioning?.validate(name: "\(name).positioning")
        }

        private enum CodingKeys: String, CodingKey {
            case applications = "Applications"
            case clockSync = "ClockSync"
            case fuota = "Fuota"
            case multicast = "Multicast"
            case positioning = "Positioning"
        }
    }

    public struct FuotaTask: AWSDecodableShape {
        public let arn: String?
        public let id: String?
        public let name: String?

        public init(arn: String? = nil, id: String? = nil, name: String? = nil) {
            self.arn = arn
            self.id = id
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
            case name = "Name"
        }
    }

    public struct GatewayListItem: AWSEncodableShape & AWSDecodableShape {
        /// The frequency to use for the gateways when sending a downlink message to the wireless device.
        public let downlinkFrequency: Int
        /// The ID of the wireless gateways that you want to add to the list of gateways when sending downlink messages.
        public let gatewayId: String

        public init(downlinkFrequency: Int, gatewayId: String) {
            self.downlinkFrequency = downlinkFrequency
            self.gatewayId = gatewayId
        }

        public func validate(name: String) throws {
            try self.validate(self.downlinkFrequency, name: "downlinkFrequency", parent: name, max: 1_000_000_000)
            try self.validate(self.downlinkFrequency, name: "downlinkFrequency", parent: name, min: 100_000_000)
            try self.validate(self.gatewayId, name: "gatewayId", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case downlinkFrequency = "DownlinkFrequency"
            case gatewayId = "GatewayId"
        }
    }

    public struct GetDestinationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "name", location: .uri("Name"))
        ]

        /// The name of the resource to get.
        public let name: String

        public init(name: String) {
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 128)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetDestinationResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The description of the resource.
        public let description: String?
        /// The rule name or topic rule to send messages to.
        public let expression: String?
        /// The type of value in Expression.
        public let expressionType: ExpressionType?
        /// The name of the resource.
        public let name: String?
        /// The ARN of the IAM Role that authorizes the destination.
        public let roleArn: String?

        public init(arn: String? = nil, description: String? = nil, expression: String? = nil, expressionType: ExpressionType? = nil, name: String? = nil, roleArn: String? = nil) {
            self.arn = arn
            self.description = description
            self.expression = expression
            self.expressionType = expressionType
            self.name = name
            self.roleArn = roleArn
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case description = "Description"
            case expression = "Expression"
            case expressionType = "ExpressionType"
            case name = "Name"
            case roleArn = "RoleArn"
        }
    }

    public struct GetDeviceProfileRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to get.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetDeviceProfileResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The ID of the device profile.
        public let id: String?
        /// Information about the device profile.
        public let loRaWAN: LoRaWANDeviceProfile?
        /// The name of the resource.
        public let name: String?

        public init(arn: String? = nil, id: String? = nil, loRaWAN: LoRaWANDeviceProfile? = nil, name: String? = nil) {
            self.arn = arn
            self.id = id
            self.loRaWAN = loRaWAN
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
        }
    }

    public struct GetEventConfigurationByResourceTypesRequest: AWSEncodableShape {
        public init() {}
    }

    public struct GetEventConfigurationByResourceTypesResponse: AWSDecodableShape {
        /// Resource type event configuration for the connection status event.
        public let connectionStatus: ConnectionStatusResourceTypeEventConfiguration?
        /// Resource type event configuration for the device registration state event.
        public let deviceRegistrationState: DeviceRegistrationStateResourceTypeEventConfiguration?
        /// Resource type event configuration for the join event.
        public let join: JoinResourceTypeEventConfiguration?
        /// Resource type event configuration object for the message delivery status event.
        public let messageDeliveryStatus: MessageDeliveryStatusResourceTypeEventConfiguration?
        /// Resource type event configuration for the proximity event.
        public let proximity: ProximityResourceTypeEventConfiguration?

        public init(connectionStatus: ConnectionStatusResourceTypeEventConfiguration? = nil, deviceRegistrationState: DeviceRegistrationStateResourceTypeEventConfiguration? = nil, join: JoinResourceTypeEventConfiguration? = nil, messageDeliveryStatus: MessageDeliveryStatusResourceTypeEventConfiguration? = nil, proximity: ProximityResourceTypeEventConfiguration? = nil) {
            self.connectionStatus = connectionStatus
            self.deviceRegistrationState = deviceRegistrationState
            self.join = join
            self.messageDeliveryStatus = messageDeliveryStatus
            self.proximity = proximity
        }

        private enum CodingKeys: String, CodingKey {
            case connectionStatus = "ConnectionStatus"
            case deviceRegistrationState = "DeviceRegistrationState"
            case join = "Join"
            case messageDeliveryStatus = "MessageDeliveryStatus"
            case proximity = "Proximity"
        }
    }

    public struct GetFuotaTaskRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetFuotaTaskResponse: AWSDecodableShape {
        public let arn: String?
        public let createdAt: Date?
        public let description: String?
        public let firmwareUpdateImage: String?
        public let firmwareUpdateRole: String?
        public let id: String?
        public let loRaWAN: LoRaWANFuotaTaskGetInfo?
        public let name: String?
        public let status: FuotaTaskStatus?

        public init(arn: String? = nil, createdAt: Date? = nil, description: String? = nil, firmwareUpdateImage: String? = nil, firmwareUpdateRole: String? = nil, id: String? = nil, loRaWAN: LoRaWANFuotaTaskGetInfo? = nil, name: String? = nil, status: FuotaTaskStatus? = nil) {
            self.arn = arn
            self.createdAt = createdAt
            self.description = description
            self.firmwareUpdateImage = firmwareUpdateImage
            self.firmwareUpdateRole = firmwareUpdateRole
            self.id = id
            self.loRaWAN = loRaWAN
            self.name = name
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case createdAt = "CreatedAt"
            case description = "Description"
            case firmwareUpdateImage = "FirmwareUpdateImage"
            case firmwareUpdateRole = "FirmwareUpdateRole"
            case id = "Id"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case status = "Status"
        }
    }

    public struct GetLogLevelsByResourceTypesRequest: AWSEncodableShape {
        public init() {}
    }

    public struct GetLogLevelsByResourceTypesResponse: AWSDecodableShape {
        public let defaultLogLevel: LogLevel?
        public let wirelessDeviceLogOptions: [WirelessDeviceLogOption]?
        public let wirelessGatewayLogOptions: [WirelessGatewayLogOption]?

        public init(defaultLogLevel: LogLevel? = nil, wirelessDeviceLogOptions: [WirelessDeviceLogOption]? = nil, wirelessGatewayLogOptions: [WirelessGatewayLogOption]? = nil) {
            self.defaultLogLevel = defaultLogLevel
            self.wirelessDeviceLogOptions = wirelessDeviceLogOptions
            self.wirelessGatewayLogOptions = wirelessGatewayLogOptions
        }

        private enum CodingKeys: String, CodingKey {
            case defaultLogLevel = "DefaultLogLevel"
            case wirelessDeviceLogOptions = "WirelessDeviceLogOptions"
            case wirelessGatewayLogOptions = "WirelessGatewayLogOptions"
        }
    }

    public struct GetMulticastGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetMulticastGroupResponse: AWSDecodableShape {
        public let arn: String?
        public let createdAt: Date?
        public let description: String?
        public let id: String?
        public let loRaWAN: LoRaWANMulticastGet?
        public let name: String?
        public let status: String?

        public init(arn: String? = nil, createdAt: Date? = nil, description: String? = nil, id: String? = nil, loRaWAN: LoRaWANMulticastGet? = nil, name: String? = nil, status: String? = nil) {
            self.arn = arn
            self.createdAt = createdAt
            self.description = description
            self.id = id
            self.loRaWAN = loRaWAN
            self.name = name
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case createdAt = "CreatedAt"
            case description = "Description"
            case id = "Id"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case status = "Status"
        }
    }

    public struct GetMulticastGroupSessionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetMulticastGroupSessionResponse: AWSDecodableShape {
        public let loRaWAN: LoRaWANMulticastSession?

        public init(loRaWAN: LoRaWANMulticastSession? = nil) {
            self.loRaWAN = loRaWAN
        }

        private enum CodingKeys: String, CodingKey {
            case loRaWAN = "LoRaWAN"
        }
    }

    public struct GetNetworkAnalyzerConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "configurationName", location: .uri("ConfigurationName"))
        ]

        public let configurationName: String

        public init(configurationName: String) {
            self.configurationName = configurationName
        }

        public func validate(name: String) throws {
            try self.validate(self.configurationName, name: "configurationName", parent: name, max: 1024)
            try self.validate(self.configurationName, name: "configurationName", parent: name, min: 1)
            try self.validate(self.configurationName, name: "configurationName", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetNetworkAnalyzerConfigurationResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the new resource.
        public let arn: String?
        public let description: String?
        public let name: String?
        public let traceContent: TraceContent?
        /// List of wireless gateway resources that have been added to the network analyzer configuration.
        public let wirelessDevices: [String]?
        /// List of wireless gateway resources that have been added to the network analyzer configuration.
        public let wirelessGateways: [String]?

        public init(arn: String? = nil, description: String? = nil, name: String? = nil, traceContent: TraceContent? = nil, wirelessDevices: [String]? = nil, wirelessGateways: [String]? = nil) {
            self.arn = arn
            self.description = description
            self.name = name
            self.traceContent = traceContent
            self.wirelessDevices = wirelessDevices
            self.wirelessGateways = wirelessGateways
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case description = "Description"
            case name = "Name"
            case traceContent = "TraceContent"
            case wirelessDevices = "WirelessDevices"
            case wirelessGateways = "WirelessGateways"
        }
    }

    public struct GetPartnerAccountRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "partnerAccountId", location: .uri("PartnerAccountId")),
            AWSMemberEncoding(label: "partnerType", location: .querystring("partnerType"))
        ]

        /// The partner account ID to disassociate from the AWS account.
        public let partnerAccountId: String
        /// The partner type.
        public let partnerType: PartnerType

        public init(partnerAccountId: String, partnerType: PartnerType) {
            self.partnerAccountId = partnerAccountId
            self.partnerType = partnerType
        }

        public func validate(name: String) throws {
            try self.validate(self.partnerAccountId, name: "partnerAccountId", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetPartnerAccountResponse: AWSDecodableShape {
        /// Whether the partner account is linked to the AWS account.
        public let accountLinked: Bool?
        /// The Sidewalk account credentials.
        public let sidewalk: SidewalkAccountInfoWithFingerprint?

        public init(accountLinked: Bool? = nil, sidewalk: SidewalkAccountInfoWithFingerprint? = nil) {
            self.accountLinked = accountLinked
            self.sidewalk = sidewalk
        }

        private enum CodingKeys: String, CodingKey {
            case accountLinked = "AccountLinked"
            case sidewalk = "Sidewalk"
        }
    }

    public struct GetPositionConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceIdentifier", location: .uri("ResourceIdentifier")),
            AWSMemberEncoding(label: "resourceType", location: .querystring("resourceType"))
        ]

        /// Resource identifier used in a position configuration.
        public let resourceIdentifier: String
        /// Resource type of the resource for which position configuration is retrieved.
        public let resourceType: PositionResourceType

        public init(resourceIdentifier: String, resourceType: PositionResourceType) {
            self.resourceIdentifier = resourceIdentifier
            self.resourceType = resourceType
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceIdentifier, name: "resourceIdentifier", parent: name, pattern: "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetPositionConfigurationResponse: AWSDecodableShape {
        /// The position data destination that describes the AWS IoT rule that processes the device's position data for use by AWS IoT Core for LoRaWAN.
        public let destination: String?
        /// The wrapper for the solver configuration details object.
        public let solvers: PositionSolverDetails?

        public init(destination: String? = nil, solvers: PositionSolverDetails? = nil) {
            self.destination = destination
            self.solvers = solvers
        }

        private enum CodingKeys: String, CodingKey {
            case destination = "Destination"
            case solvers = "Solvers"
        }
    }

    public struct GetPositionEstimateRequest: AWSEncodableShape {
        /// Retrieves an estimated device position by resolving measurement data from cellular radio towers. The  position is resolved using HERE's cellular-based solver.
        public let cellTowers: CellTowers?
        /// Retrieves an estimated device position by resolving the global navigation satellite system (GNSS) scan data. The position is resolved using the GNSS solver powered by LoRa Cloud.
        public let gnss: Gnss?
        /// Retrieves an estimated device position by resolving the IP address information from the device. The position is resolved using MaxMind's IP-based solver.
        public let ip: Ip?
        /// Optional information that specifies the time when the position information will be resolved. It uses the UNIX timestamp format. If not specified, the time at which the request was received will be used.
        public let timestamp: Date?
        /// Retrieves an estimated device position by resolving WLAN measurement data. The position is resolved using HERE's Wi-Fi based solver.
        public let wiFiAccessPoints: [WiFiAccessPoint]?

        public init(cellTowers: CellTowers? = nil, gnss: Gnss? = nil, ip: Ip? = nil, timestamp: Date? = nil, wiFiAccessPoints: [WiFiAccessPoint]? = nil) {
            self.cellTowers = cellTowers
            self.gnss = gnss
            self.ip = ip
            self.timestamp = timestamp
            self.wiFiAccessPoints = wiFiAccessPoints
        }

        public func validate(name: String) throws {
            try self.cellTowers?.validate(name: "\(name).cellTowers")
            try self.gnss?.validate(name: "\(name).gnss")
            try self.wiFiAccessPoints?.forEach {
                try $0.validate(name: "\(name).wiFiAccessPoints[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case cellTowers = "CellTowers"
            case gnss = "Gnss"
            case ip = "Ip"
            case timestamp = "Timestamp"
            case wiFiAccessPoints = "WiFiAccessPoints"
        }
    }

    public struct GetPositionEstimateResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "geoJsonPayload"
        public static let _options: AWSShapeOptions = [.rawPayload]
        public static var _encoding = [
            AWSMemberEncoding(label: "geoJsonPayload", location: .body("GeoJsonPayload"))
        ]

        /// The position information of the resource, displayed as a JSON payload. The payload uses the GeoJSON format,  which a format that's used to encode geographic data structures. For more information, see GeoJSON.
        public let geoJsonPayload: AWSPayload?

        public init(geoJsonPayload: AWSPayload? = nil) {
            self.geoJsonPayload = geoJsonPayload
        }

        private enum CodingKeys: String, CodingKey {
            case geoJsonPayload = "GeoJsonPayload"
        }
    }

    public struct GetPositionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceIdentifier", location: .uri("ResourceIdentifier")),
            AWSMemberEncoding(label: "resourceType", location: .querystring("resourceType"))
        ]

        /// Resource identifier used to retrieve the position information.
        public let resourceIdentifier: String
        /// Resource type of the resource for which position information is retrieved.
        public let resourceType: PositionResourceType

        public init(resourceIdentifier: String, resourceType: PositionResourceType) {
            self.resourceIdentifier = resourceIdentifier
            self.resourceType = resourceType
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceIdentifier, name: "resourceIdentifier", parent: name, pattern: "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetPositionResponse: AWSDecodableShape {
        /// The accuracy of the estimated position in meters. An empty value indicates that no position data is available. A value of ‘0.0’ value indicates that position data is available. This data corresponds to the position information that you specified instead of the position computed by solver.
        public let accuracy: Accuracy?
        /// The position information of the resource.
        public let position: [Float]?
        /// The vendor of the positioning solver.
        public let solverProvider: PositionSolverProvider?
        /// The type of solver used to identify the position of the resource.
        public let solverType: PositionSolverType?
        /// The version of the positioning solver.
        public let solverVersion: String?
        /// The timestamp at which the device's position was determined.
        public let timestamp: String?

        public init(accuracy: Accuracy? = nil, position: [Float]? = nil, solverProvider: PositionSolverProvider? = nil, solverType: PositionSolverType? = nil, solverVersion: String? = nil, timestamp: String? = nil) {
            self.accuracy = accuracy
            self.position = position
            self.solverProvider = solverProvider
            self.solverType = solverType
            self.solverVersion = solverVersion
            self.timestamp = timestamp
        }

        private enum CodingKeys: String, CodingKey {
            case accuracy = "Accuracy"
            case position = "Position"
            case solverProvider = "SolverProvider"
            case solverType = "SolverType"
            case solverVersion = "SolverVersion"
            case timestamp = "Timestamp"
        }
    }

    public struct GetResourceEventConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "identifier", location: .uri("Identifier")),
            AWSMemberEncoding(label: "identifierType", location: .querystring("identifierType")),
            AWSMemberEncoding(label: "partnerType", location: .querystring("partnerType"))
        ]

        /// Resource identifier to opt in for event messaging.
        public let identifier: String
        /// Identifier type of the particular resource identifier for event configuration.
        public let identifierType: IdentifierType
        /// Partner type of the resource if the identifier type is PartnerAccountId.
        public let partnerType: EventNotificationPartnerType?

        public init(identifier: String, identifierType: IdentifierType, partnerType: EventNotificationPartnerType? = nil) {
            self.identifier = identifier
            self.identifierType = identifierType
            self.partnerType = partnerType
        }

        public func validate(name: String) throws {
            try self.validate(self.identifier, name: "identifier", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetResourceEventConfigurationResponse: AWSDecodableShape {
        /// Event configuration for the connection status event.
        public let connectionStatus: ConnectionStatusEventConfiguration?
        /// Event configuration for the device registration state event.
        public let deviceRegistrationState: DeviceRegistrationStateEventConfiguration?
        /// Event configuration for the join event.
        public let join: JoinEventConfiguration?
        /// Event configuration for the message delivery status event.
        public let messageDeliveryStatus: MessageDeliveryStatusEventConfiguration?
        /// Event configuration for the proximity event.
        public let proximity: ProximityEventConfiguration?

        public init(connectionStatus: ConnectionStatusEventConfiguration? = nil, deviceRegistrationState: DeviceRegistrationStateEventConfiguration? = nil, join: JoinEventConfiguration? = nil, messageDeliveryStatus: MessageDeliveryStatusEventConfiguration? = nil, proximity: ProximityEventConfiguration? = nil) {
            self.connectionStatus = connectionStatus
            self.deviceRegistrationState = deviceRegistrationState
            self.join = join
            self.messageDeliveryStatus = messageDeliveryStatus
            self.proximity = proximity
        }

        private enum CodingKeys: String, CodingKey {
            case connectionStatus = "ConnectionStatus"
            case deviceRegistrationState = "DeviceRegistrationState"
            case join = "Join"
            case messageDeliveryStatus = "MessageDeliveryStatus"
            case proximity = "Proximity"
        }
    }

    public struct GetResourceLogLevelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceIdentifier", location: .uri("ResourceIdentifier")),
            AWSMemberEncoding(label: "resourceType", location: .querystring("resourceType"))
        ]

        public let resourceIdentifier: String
        /// The type of the resource, which can be WirelessDevice or WirelessGateway.
        public let resourceType: String

        public init(resourceIdentifier: String, resourceType: String) {
            self.resourceIdentifier = resourceIdentifier
            self.resourceType = resourceType
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceIdentifier, name: "resourceIdentifier", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetResourceLogLevelResponse: AWSDecodableShape {
        public let logLevel: LogLevel?

        public init(logLevel: LogLevel? = nil) {
            self.logLevel = logLevel
        }

        private enum CodingKeys: String, CodingKey {
            case logLevel = "LogLevel"
        }
    }

    public struct GetResourcePositionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceIdentifier", location: .uri("ResourceIdentifier")),
            AWSMemberEncoding(label: "resourceType", location: .querystring("resourceType"))
        ]

        /// The identifier of the resource for which position information is retrieved. It can be the wireless device ID or the wireless gateway ID depending on the resource type.
        public let resourceIdentifier: String
        /// The type of resource for which position information is retrieved, which can be a wireless device or a wireless gateway.
        public let resourceType: PositionResourceType

        public init(resourceIdentifier: String, resourceType: PositionResourceType) {
            self.resourceIdentifier = resourceIdentifier
            self.resourceType = resourceType
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceIdentifier, name: "resourceIdentifier", parent: name, pattern: "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetResourcePositionResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "geoJsonPayload"
        public static let _options: AWSShapeOptions = [.rawPayload]
        public static var _encoding = [
            AWSMemberEncoding(label: "geoJsonPayload", location: .body("GeoJsonPayload"))
        ]

        /// The position information of the resource, displayed as a JSON payload. The payload uses the GeoJSON format,  which a format that's used to encode geographic data structures. For more information, see GeoJSON.
        public let geoJsonPayload: AWSPayload?

        public init(geoJsonPayload: AWSPayload? = nil) {
            self.geoJsonPayload = geoJsonPayload
        }

        private enum CodingKeys: String, CodingKey {
            case geoJsonPayload = "GeoJsonPayload"
        }
    }

    public struct GetServiceEndpointRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "serviceType", location: .querystring("serviceType"))
        ]

        /// The service type for which to get endpoint information about. Can be CUPS for the Configuration and Update Server endpoint, or LNS for the LoRaWAN Network Server endpoint or CLAIM for the global endpoint.
        public let serviceType: WirelessGatewayServiceType?

        public init(serviceType: WirelessGatewayServiceType? = nil) {
            self.serviceType = serviceType
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetServiceEndpointResponse: AWSDecodableShape {
        /// The Root CA of the server trust certificate.
        public let serverTrust: String?
        /// The service endpoint value.
        public let serviceEndpoint: String?
        /// The endpoint's service type.
        public let serviceType: WirelessGatewayServiceType?

        public init(serverTrust: String? = nil, serviceEndpoint: String? = nil, serviceType: WirelessGatewayServiceType? = nil) {
            self.serverTrust = serverTrust
            self.serviceEndpoint = serviceEndpoint
            self.serviceType = serviceType
        }

        private enum CodingKeys: String, CodingKey {
            case serverTrust = "ServerTrust"
            case serviceEndpoint = "ServiceEndpoint"
            case serviceType = "ServiceType"
        }
    }

    public struct GetServiceProfileRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to get.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetServiceProfileResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The ID of the service profile.
        public let id: String?
        /// Information about the service profile.
        public let loRaWAN: LoRaWANGetServiceProfileInfo?
        /// The name of the resource.
        public let name: String?

        public init(arn: String? = nil, id: String? = nil, loRaWAN: LoRaWANGetServiceProfileInfo? = nil, name: String? = nil) {
            self.arn = arn
            self.id = id
            self.loRaWAN = loRaWAN
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
        }
    }

    public struct GetWirelessDeviceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "identifier", location: .uri("Identifier")),
            AWSMemberEncoding(label: "identifierType", location: .querystring("identifierType"))
        ]

        /// The identifier of the wireless device to get.
        public let identifier: String
        /// The type of identifier used in identifier.
        public let identifierType: WirelessDeviceIdType

        public init(identifier: String, identifierType: WirelessDeviceIdType) {
            self.identifier = identifier
            self.identifierType = identifierType
        }

        public func validate(name: String) throws {
            try self.validate(self.identifier, name: "identifier", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWirelessDeviceResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The description of the resource.
        public let description: String?
        /// The name of the destination to which the device is assigned.
        public let destinationName: String?
        /// The ID of the wireless device.
        public let id: String?
        /// Information about the wireless device.
        public let loRaWAN: LoRaWANDevice?
        /// The name of the resource.
        public let name: String?
        /// FPort values for the GNSS, stream, and ClockSync functions of the positioning information.
        public let positioning: PositioningConfigStatus?
        /// Sidewalk device object.
        public let sidewalk: SidewalkDevice?
        /// The ARN of the thing associated with the wireless device.
        public let thingArn: String?
        /// The name of the thing associated with the wireless device. The value is empty if a thing isn't associated with the device.
        public let thingName: String?
        /// The wireless device type.
        public let type: WirelessDeviceType?

        public init(arn: String? = nil, description: String? = nil, destinationName: String? = nil, id: String? = nil, loRaWAN: LoRaWANDevice? = nil, name: String? = nil, positioning: PositioningConfigStatus? = nil, sidewalk: SidewalkDevice? = nil, thingArn: String? = nil, thingName: String? = nil, type: WirelessDeviceType? = nil) {
            self.arn = arn
            self.description = description
            self.destinationName = destinationName
            self.id = id
            self.loRaWAN = loRaWAN
            self.name = name
            self.positioning = positioning
            self.sidewalk = sidewalk
            self.thingArn = thingArn
            self.thingName = thingName
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case description = "Description"
            case destinationName = "DestinationName"
            case id = "Id"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case positioning = "Positioning"
            case sidewalk = "Sidewalk"
            case thingArn = "ThingArn"
            case thingName = "ThingName"
            case type = "Type"
        }
    }

    public struct GetWirelessDeviceStatisticsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "wirelessDeviceId", location: .uri("WirelessDeviceId"))
        ]

        /// The ID of the wireless device for which to get the data.
        public let wirelessDeviceId: String

        public init(wirelessDeviceId: String) {
            self.wirelessDeviceId = wirelessDeviceId
        }

        public func validate(name: String) throws {
            try self.validate(self.wirelessDeviceId, name: "wirelessDeviceId", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWirelessDeviceStatisticsResponse: AWSDecodableShape {
        /// The date and time when the most recent uplink was received.
        public let lastUplinkReceivedAt: String?
        /// Information about the wireless device's operations.
        public let loRaWAN: LoRaWANDeviceMetadata?
        /// MetaData for Sidewalk device.
        public let sidewalk: SidewalkDeviceMetadata?
        /// The ID of the wireless device.
        public let wirelessDeviceId: String?

        public init(lastUplinkReceivedAt: String? = nil, loRaWAN: LoRaWANDeviceMetadata? = nil, sidewalk: SidewalkDeviceMetadata? = nil, wirelessDeviceId: String? = nil) {
            self.lastUplinkReceivedAt = lastUplinkReceivedAt
            self.loRaWAN = loRaWAN
            self.sidewalk = sidewalk
            self.wirelessDeviceId = wirelessDeviceId
        }

        private enum CodingKeys: String, CodingKey {
            case lastUplinkReceivedAt = "LastUplinkReceivedAt"
            case loRaWAN = "LoRaWAN"
            case sidewalk = "Sidewalk"
            case wirelessDeviceId = "WirelessDeviceId"
        }
    }

    public struct GetWirelessGatewayCertificateRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to get.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWirelessGatewayCertificateResponse: AWSDecodableShape {
        /// The ID of the certificate associated with the wireless gateway.
        public let iotCertificateId: String?
        /// The ID of the certificate that is associated with the wireless gateway and used for the LoRaWANNetworkServer endpoint.
        public let loRaWANNetworkServerCertificateId: String?

        public init(iotCertificateId: String? = nil, loRaWANNetworkServerCertificateId: String? = nil) {
            self.iotCertificateId = iotCertificateId
            self.loRaWANNetworkServerCertificateId = loRaWANNetworkServerCertificateId
        }

        private enum CodingKeys: String, CodingKey {
            case iotCertificateId = "IotCertificateId"
            case loRaWANNetworkServerCertificateId = "LoRaWANNetworkServerCertificateId"
        }
    }

    public struct GetWirelessGatewayFirmwareInformationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to get.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWirelessGatewayFirmwareInformationResponse: AWSDecodableShape {
        /// Information about the wireless gateway's firmware.
        public let loRaWAN: LoRaWANGatewayCurrentVersion?

        public init(loRaWAN: LoRaWANGatewayCurrentVersion? = nil) {
            self.loRaWAN = loRaWAN
        }

        private enum CodingKeys: String, CodingKey {
            case loRaWAN = "LoRaWAN"
        }
    }

    public struct GetWirelessGatewayRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "identifier", location: .uri("Identifier")),
            AWSMemberEncoding(label: "identifierType", location: .querystring("identifierType"))
        ]

        /// The identifier of the wireless gateway to get.
        public let identifier: String
        /// The type of identifier used in identifier.
        public let identifierType: WirelessGatewayIdType

        public init(identifier: String, identifierType: WirelessGatewayIdType) {
            self.identifier = identifier
            self.identifierType = identifierType
        }

        public func validate(name: String) throws {
            try self.validate(self.identifier, name: "identifier", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWirelessGatewayResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The description of the resource.
        public let description: String?
        /// The ID of the wireless gateway.
        public let id: String?
        /// Information about the wireless gateway.
        public let loRaWAN: LoRaWANGateway?
        /// The name of the resource.
        public let name: String?
        /// The ARN of the thing associated with the wireless gateway.
        public let thingArn: String?
        /// The name of the thing associated with the wireless gateway. The value is empty if a thing isn't associated with the gateway.
        public let thingName: String?

        public init(arn: String? = nil, description: String? = nil, id: String? = nil, loRaWAN: LoRaWANGateway? = nil, name: String? = nil, thingArn: String? = nil, thingName: String? = nil) {
            self.arn = arn
            self.description = description
            self.id = id
            self.loRaWAN = loRaWAN
            self.name = name
            self.thingArn = thingArn
            self.thingName = thingName
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case description = "Description"
            case id = "Id"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case thingArn = "ThingArn"
            case thingName = "ThingName"
        }
    }

    public struct GetWirelessGatewayStatisticsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "wirelessGatewayId", location: .uri("WirelessGatewayId"))
        ]

        /// The ID of the wireless gateway for which to get the data.
        public let wirelessGatewayId: String

        public init(wirelessGatewayId: String) {
            self.wirelessGatewayId = wirelessGatewayId
        }

        public func validate(name: String) throws {
            try self.validate(self.wirelessGatewayId, name: "wirelessGatewayId", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWirelessGatewayStatisticsResponse: AWSDecodableShape {
        /// The connection status of the wireless gateway.
        public let connectionStatus: ConnectionStatus?
        /// The date and time when the most recent uplink was received.
        public let lastUplinkReceivedAt: String?
        /// The ID of the wireless gateway.
        public let wirelessGatewayId: String?

        public init(connectionStatus: ConnectionStatus? = nil, lastUplinkReceivedAt: String? = nil, wirelessGatewayId: String? = nil) {
            self.connectionStatus = connectionStatus
            self.lastUplinkReceivedAt = lastUplinkReceivedAt
            self.wirelessGatewayId = wirelessGatewayId
        }

        private enum CodingKeys: String, CodingKey {
            case connectionStatus = "ConnectionStatus"
            case lastUplinkReceivedAt = "LastUplinkReceivedAt"
            case wirelessGatewayId = "WirelessGatewayId"
        }
    }

    public struct GetWirelessGatewayTaskDefinitionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to get.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 36)
            try self.validate(self.id, name: "id", parent: name, pattern: "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWirelessGatewayTaskDefinitionResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// Whether to automatically create tasks using this task definition for all gateways with the specified current version. If false, the task must me created by calling CreateWirelessGatewayTask.
        public let autoCreateTasks: Bool?
        /// The name of the resource.
        public let name: String?
        /// Information about the gateways to update.
        public let update: UpdateWirelessGatewayTaskCreate?

        public init(arn: String? = nil, autoCreateTasks: Bool? = nil, name: String? = nil, update: UpdateWirelessGatewayTaskCreate? = nil) {
            self.arn = arn
            self.autoCreateTasks = autoCreateTasks
            self.name = name
            self.update = update
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case autoCreateTasks = "AutoCreateTasks"
            case name = "Name"
            case update = "Update"
        }
    }

    public struct GetWirelessGatewayTaskRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the resource to get.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWirelessGatewayTaskResponse: AWSDecodableShape {
        /// The date and time when the most recent uplink was received.
        public let lastUplinkReceivedAt: String?
        /// The status of the request.
        public let status: WirelessGatewayTaskStatus?
        /// The date and time when the task was created.
        public let taskCreatedAt: String?
        /// The ID of the wireless gateway.
        public let wirelessGatewayId: String?
        /// The ID of the WirelessGatewayTask.
        public let wirelessGatewayTaskDefinitionId: String?

        public init(lastUplinkReceivedAt: String? = nil, status: WirelessGatewayTaskStatus? = nil, taskCreatedAt: String? = nil, wirelessGatewayId: String? = nil, wirelessGatewayTaskDefinitionId: String? = nil) {
            self.lastUplinkReceivedAt = lastUplinkReceivedAt
            self.status = status
            self.taskCreatedAt = taskCreatedAt
            self.wirelessGatewayId = wirelessGatewayId
            self.wirelessGatewayTaskDefinitionId = wirelessGatewayTaskDefinitionId
        }

        private enum CodingKeys: String, CodingKey {
            case lastUplinkReceivedAt = "LastUplinkReceivedAt"
            case status = "Status"
            case taskCreatedAt = "TaskCreatedAt"
            case wirelessGatewayId = "WirelessGatewayId"
            case wirelessGatewayTaskDefinitionId = "WirelessGatewayTaskDefinitionId"
        }
    }

    public struct GlobalIdentity: AWSEncodableShape {
        /// GERAN (GSM EDGE Radio Access Network) cell global identifier.
        public let geranCid: Int
        /// Location area code of the global identity.
        public let lac: Int

        public init(geranCid: Int, lac: Int) {
            self.geranCid = geranCid
            self.lac = lac
        }

        public func validate(name: String) throws {
            try self.validate(self.geranCid, name: "geranCid", parent: name, max: 65535)
            try self.validate(self.geranCid, name: "geranCid", parent: name, min: 0)
            try self.validate(self.lac, name: "lac", parent: name, max: 65535)
            try self.validate(self.lac, name: "lac", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case geranCid = "GeranCid"
            case lac = "Lac"
        }
    }

    public struct Gnss: AWSEncodableShape {
        /// Optional assistance altitude, which is the altitude of the device at capture time, specified in meters above  the WGS84 reference ellipsoid.
        public let assistAltitude: Float?
        /// Optional assistance position information, specified using latitude and longitude values in degrees. The co-ordinates are inside the WGS84 reference frame.
        public let assistPosition: [Float]?
        /// Optional parameter that gives an estimate of the time when the GNSS scan information is  taken, in seconds GPS time (GPST). If capture time is not specified, the local server time is used.
        public let captureTime: Float?
        /// Optional value that gives the capture time estimate accuracy, in seconds. If capture time accuracy is not specified, default value of 300 is used.
        public let captureTimeAccuracy: Float?
        /// Payload that contains the GNSS scan result, or NAV message, in hexadecimal notation.
        public let payload: String
        /// Optional parameter that forces 2D solve, which modifies the positioning algorithm to a 2D solution  problem. When this parameter is specified, the assistance altitude should have an accuracy of at least 10 meters.
        public let use2DSolver: Bool?

        public init(assistAltitude: Float? = nil, assistPosition: [Float]? = nil, captureTime: Float? = nil, captureTimeAccuracy: Float? = nil, payload: String, use2DSolver: Bool? = nil) {
            self.assistAltitude = assistAltitude
            self.assistPosition = assistPosition
            self.captureTime = captureTime
            self.captureTimeAccuracy = captureTimeAccuracy
            self.payload = payload
            self.use2DSolver = use2DSolver
        }

        public func validate(name: String) throws {
            try self.validate(self.assistPosition, name: "assistPosition", parent: name, max: 2)
            try self.validate(self.assistPosition, name: "assistPosition", parent: name, min: 2)
            try self.validate(self.payload, name: "payload", parent: name, max: 2048)
        }

        private enum CodingKeys: String, CodingKey {
            case assistAltitude = "AssistAltitude"
            case assistPosition = "AssistPosition"
            case captureTime = "CaptureTime"
            case captureTimeAccuracy = "CaptureTimeAccuracy"
            case payload = "Payload"
            case use2DSolver = "Use2DSolver"
        }
    }

    public struct GsmLocalId: AWSEncodableShape {
        /// GSM broadcast control channel.
        public let bcch: Int
        /// GSM base station identity code (BSIC).
        public let bsic: Int

        public init(bcch: Int, bsic: Int) {
            self.bcch = bcch
            self.bsic = bsic
        }

        public func validate(name: String) throws {
            try self.validate(self.bcch, name: "bcch", parent: name, max: 1023)
            try self.validate(self.bcch, name: "bcch", parent: name, min: 0)
            try self.validate(self.bsic, name: "bsic", parent: name, max: 63)
            try self.validate(self.bsic, name: "bsic", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case bcch = "Bcch"
            case bsic = "Bsic"
        }
    }

    public struct GsmNmrObj: AWSEncodableShape {
        /// GSM broadcast control channel.
        public let bcch: Int
        /// GSM base station identity code (BSIC).
        public let bsic: Int
        /// Global identity information of the GSM object.
        public let globalIdentity: GlobalIdentity?
        /// Rx level, which is the received signal power, measured in dBm (decibel-milliwatts).
        public let rxLevel: Int?

        public init(bcch: Int, bsic: Int, globalIdentity: GlobalIdentity? = nil, rxLevel: Int? = nil) {
            self.bcch = bcch
            self.bsic = bsic
            self.globalIdentity = globalIdentity
            self.rxLevel = rxLevel
        }

        public func validate(name: String) throws {
            try self.validate(self.bcch, name: "bcch", parent: name, max: 1023)
            try self.validate(self.bcch, name: "bcch", parent: name, min: 0)
            try self.validate(self.bsic, name: "bsic", parent: name, max: 63)
            try self.validate(self.bsic, name: "bsic", parent: name, min: 0)
            try self.globalIdentity?.validate(name: "\(name).globalIdentity")
            try self.validate(self.rxLevel, name: "rxLevel", parent: name, max: -25)
            try self.validate(self.rxLevel, name: "rxLevel", parent: name, min: -110)
        }

        private enum CodingKeys: String, CodingKey {
            case bcch = "Bcch"
            case bsic = "Bsic"
            case globalIdentity = "GlobalIdentity"
            case rxLevel = "RxLevel"
        }
    }

    public struct GsmObj: AWSEncodableShape {
        /// GERAN (GSM EDGE Radio Access Network) Cell Global Identifier.
        public let geranCid: Int
        /// GSM local identification (local ID) information.
        public let gsmLocalId: GsmLocalId?
        /// GSM object for network measurement reports.
        public let gsmNmr: [GsmNmrObj]?
        /// Timing advance value, which corresponds to the length of time a signal takes to reach the base station from a mobile phone.
        public let gsmTimingAdvance: Int?
        /// Location area code.
        public let lac: Int
        /// Mobile Country Code.
        public let mcc: Int
        /// Mobile Network Code.
        public let mnc: Int
        /// Rx level, which is the received signal power, measured in dBm (decibel-milliwatts).
        public let rxLevel: Int?

        public init(geranCid: Int, gsmLocalId: GsmLocalId? = nil, gsmNmr: [GsmNmrObj]? = nil, gsmTimingAdvance: Int? = nil, lac: Int, mcc: Int, mnc: Int, rxLevel: Int? = nil) {
            self.geranCid = geranCid
            self.gsmLocalId = gsmLocalId
            self.gsmNmr = gsmNmr
            self.gsmTimingAdvance = gsmTimingAdvance
            self.lac = lac
            self.mcc = mcc
            self.mnc = mnc
            self.rxLevel = rxLevel
        }

        public func validate(name: String) throws {
            try self.validate(self.geranCid, name: "geranCid", parent: name, max: 65535)
            try self.validate(self.geranCid, name: "geranCid", parent: name, min: 0)
            try self.gsmLocalId?.validate(name: "\(name).gsmLocalId")
            try self.gsmNmr?.forEach {
                try $0.validate(name: "\(name).gsmNmr[]")
            }
            try self.validate(self.gsmNmr, name: "gsmNmr", parent: name, max: 32)
            try self.validate(self.gsmNmr, name: "gsmNmr", parent: name, min: 1)
            try self.validate(self.gsmTimingAdvance, name: "gsmTimingAdvance", parent: name, max: 63)
            try self.validate(self.gsmTimingAdvance, name: "gsmTimingAdvance", parent: name, min: 0)
            try self.validate(self.lac, name: "lac", parent: name, max: 65535)
            try self.validate(self.lac, name: "lac", parent: name, min: 1)
            try self.validate(self.mcc, name: "mcc", parent: name, max: 999)
            try self.validate(self.mcc, name: "mcc", parent: name, min: 200)
            try self.validate(self.mnc, name: "mnc", parent: name, max: 999)
            try self.validate(self.mnc, name: "mnc", parent: name, min: 0)
            try self.validate(self.rxLevel, name: "rxLevel", parent: name, max: -25)
            try self.validate(self.rxLevel, name: "rxLevel", parent: name, min: -110)
        }

        private enum CodingKeys: String, CodingKey {
            case geranCid = "GeranCid"
            case gsmLocalId = "GsmLocalId"
            case gsmNmr = "GsmNmr"
            case gsmTimingAdvance = "GsmTimingAdvance"
            case lac = "Lac"
            case mcc = "Mcc"
            case mnc = "Mnc"
            case rxLevel = "RxLevel"
        }
    }

    public struct Ip: AWSEncodableShape {
        /// IP address information.
        public let ipAddress: String

        public init(ipAddress: String) {
            self.ipAddress = ipAddress
        }

        private enum CodingKeys: String, CodingKey {
            case ipAddress = "IpAddress"
        }
    }

    public struct JoinEventConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Join event configuration object for enabling or disabling LoRaWAN related event topics.
        public let loRaWAN: LoRaWANJoinEventNotificationConfigurations?
        /// Denotes whether the wireless device ID join event topic is enabled or disabled.
        public let wirelessDeviceIdEventTopic: EventNotificationTopicStatus?

        public init(loRaWAN: LoRaWANJoinEventNotificationConfigurations? = nil, wirelessDeviceIdEventTopic: EventNotificationTopicStatus? = nil) {
            self.loRaWAN = loRaWAN
            self.wirelessDeviceIdEventTopic = wirelessDeviceIdEventTopic
        }

        private enum CodingKeys: String, CodingKey {
            case loRaWAN = "LoRaWAN"
            case wirelessDeviceIdEventTopic = "WirelessDeviceIdEventTopic"
        }
    }

    public struct JoinResourceTypeEventConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Join resource type event configuration object for enabling or disabling LoRaWAN related event topics.
        public let loRaWAN: LoRaWANJoinResourceTypeEventConfiguration?

        public init(loRaWAN: LoRaWANJoinResourceTypeEventConfiguration? = nil) {
            self.loRaWAN = loRaWAN
        }

        private enum CodingKeys: String, CodingKey {
            case loRaWAN = "LoRaWAN"
        }
    }

    public struct ListDestinationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nextToken"))
        ]

        /// The maximum number of results to return in this operation.
        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListDestinationsResponse: AWSDecodableShape {
        /// The list of destinations.
        public let destinationList: [Destinations]?
        /// The token to use to get the next set of results, or null if there are no additional results.
        public let nextToken: String?

        public init(destinationList: [Destinations]? = nil, nextToken: String? = nil) {
            self.destinationList = destinationList
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case destinationList = "DestinationList"
            case nextToken = "NextToken"
        }
    }

    public struct ListDeviceProfilesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nextToken"))
        ]

        /// The maximum number of results to return in this operation.
        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListDeviceProfilesResponse: AWSDecodableShape {
        /// The list of device profiles.
        public let deviceProfileList: [DeviceProfile]?
        /// The token to use to get the next set of results, or null if there are no additional results.
        public let nextToken: String?

        public init(deviceProfileList: [DeviceProfile]? = nil, nextToken: String? = nil) {
            self.deviceProfileList = deviceProfileList
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case deviceProfileList = "DeviceProfileList"
            case nextToken = "NextToken"
        }
    }

    public struct ListEventConfigurationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nextToken")),
            AWSMemberEncoding(label: "resourceType", location: .querystring("resourceType"))
        ]

        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?
        /// Resource type to filter event configurations.
        public let resourceType: EventNotificationResourceType

        public init(maxResults: Int? = nil, nextToken: String? = nil, resourceType: EventNotificationResourceType) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.resourceType = resourceType
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListEventConfigurationsResponse: AWSDecodableShape {
        /// Event configurations of all events for a single resource.
        public let eventConfigurationsList: [EventConfigurationItem]?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(eventConfigurationsList: [EventConfigurationItem]? = nil, nextToken: String? = nil) {
            self.eventConfigurationsList = eventConfigurationsList
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case eventConfigurationsList = "EventConfigurationsList"
            case nextToken = "NextToken"
        }
    }

    public struct ListFuotaTasksRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nextToken"))
        ]

        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListFuotaTasksResponse: AWSDecodableShape {
        public let fuotaTaskList: [FuotaTask]?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(fuotaTaskList: [FuotaTask]? = nil, nextToken: String? = nil) {
            self.fuotaTaskList = fuotaTaskList
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case fuotaTaskList = "FuotaTaskList"
            case nextToken = "NextToken"
        }
    }

    public struct ListMulticastGroupsByFuotaTaskRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nextToken"))
        ]

        public let id: String
        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(id: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.id = id
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListMulticastGroupsByFuotaTaskResponse: AWSDecodableShape {
        public let multicastGroupList: [MulticastGroupByFuotaTask]?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(multicastGroupList: [MulticastGroupByFuotaTask]? = nil, nextToken: String? = nil) {
            self.multicastGroupList = multicastGroupList
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case multicastGroupList = "MulticastGroupList"
            case nextToken = "NextToken"
        }
    }

    public struct ListMulticastGroupsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nextToken"))
        ]

        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListMulticastGroupsResponse: AWSDecodableShape {
        public let multicastGroupList: [MulticastGroup]?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(multicastGroupList: [MulticastGroup]? = nil, nextToken: String? = nil) {
            self.multicastGroupList = multicastGroupList
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case multicastGroupList = "MulticastGroupList"
            case nextToken = "NextToken"
        }
    }

    public struct ListNetworkAnalyzerConfigurationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nextToken"))
        ]

        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListNetworkAnalyzerConfigurationsResponse: AWSDecodableShape {
        /// The list of network analyzer configurations.
        public let networkAnalyzerConfigurationList: [NetworkAnalyzerConfigurations]?
        /// The token to use to get the next set of results, or null if there are no additional results.
        public let nextToken: String?

        public init(networkAnalyzerConfigurationList: [NetworkAnalyzerConfigurations]? = nil, nextToken: String? = nil) {
            self.networkAnalyzerConfigurationList = networkAnalyzerConfigurationList
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case networkAnalyzerConfigurationList = "NetworkAnalyzerConfigurationList"
            case nextToken = "NextToken"
        }
    }

    public struct ListPartnerAccountsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nextToken"))
        ]

        /// The maximum number of results to return in this operation.
        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListPartnerAccountsResponse: AWSDecodableShape {
        /// The token to use to get the next set of results, or null if there are no additional results.
        public let nextToken: String?
        /// The Sidewalk account credentials.
        public let sidewalk: [SidewalkAccountInfoWithFingerprint]?

        public init(nextToken: String? = nil, sidewalk: [SidewalkAccountInfoWithFingerprint]? = nil) {
            self.nextToken = nextToken
            self.sidewalk = sidewalk
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case sidewalk = "Sidewalk"
        }
    }

    public struct ListPositionConfigurationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nextToken")),
            AWSMemberEncoding(label: "resourceType", location: .querystring("resourceType"))
        ]

        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null  to receive the first set of results.
        public let nextToken: String?
        /// Resource type for which position configurations are listed.
        public let resourceType: PositionResourceType?

        public init(maxResults: Int? = nil, nextToken: String? = nil, resourceType: PositionResourceType? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.resourceType = resourceType
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListPositionConfigurationsResponse: AWSDecodableShape {
        /// The token to use to get the next set of results, or null if there are no additional results.
        public let nextToken: String?
        /// A list of position configurations.
        public let positionConfigurationList: [PositionConfigurationItem]?

        public init(nextToken: String? = nil, positionConfigurationList: [PositionConfigurationItem]? = nil) {
            self.nextToken = nextToken
            self.positionConfigurationList = positionConfigurationList
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case positionConfigurationList = "PositionConfigurationList"
        }
    }

    public struct ListQueuedMessagesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nextToken")),
            AWSMemberEncoding(label: "wirelessDeviceType", location: .querystring("WirelessDeviceType"))
        ]

        /// The ID of a given wireless device which the downlink message packets are being sent.
        public let id: String
        /// The maximum number of results to return in this operation.
        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise  null to receive the first set of results.
        public let nextToken: String?
        /// The wireless device type, whic can be either Sidewalk or LoRaWAN.
        public let wirelessDeviceType: WirelessDeviceType?

        public init(id: String, maxResults: Int? = nil, nextToken: String? = nil, wirelessDeviceType: WirelessDeviceType? = nil) {
            self.id = id
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.wirelessDeviceType = wirelessDeviceType
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListQueuedMessagesResponse: AWSDecodableShape {
        /// The messages in the downlink queue.
        public let downlinkQueueMessagesList: [DownlinkQueueMessage]?
        /// To retrieve the next set of results, the nextToken value from a previous response;  otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(downlinkQueueMessagesList: [DownlinkQueueMessage]? = nil, nextToken: String? = nil) {
            self.downlinkQueueMessagesList = downlinkQueueMessagesList
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case downlinkQueueMessagesList = "DownlinkQueueMessagesList"
            case nextToken = "NextToken"
        }
    }

    public struct ListServiceProfilesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nextToken"))
        ]

        /// The maximum number of results to return in this operation.
        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListServiceProfilesResponse: AWSDecodableShape {
        /// The token to use to get the next set of results, or null if there are no additional results.
        public let nextToken: String?
        /// The list of service profiles.
        public let serviceProfileList: [ServiceProfile]?

        public init(nextToken: String? = nil, serviceProfileList: [ServiceProfile]? = nil) {
            self.nextToken = nextToken
            self.serviceProfileList = serviceProfileList
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case serviceProfileList = "ServiceProfileList"
        }
    }

    public struct ListTagsForResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .querystring("resourceArn"))
        ]

        /// The ARN of the resource for which you want to list tags.
        public let resourceArn: String

        public init(resourceArn: String) {
            self.resourceArn = resourceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, max: 1011)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTagsForResourceResponse: AWSDecodableShape {
        /// The tags to attach to the specified resource. Tags are metadata that you can use to manage a resource.
        public let tags: [Tag]?

        public init(tags: [Tag]? = nil) {
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "Tags"
        }
    }

    public struct ListWirelessDevicesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "destinationName", location: .querystring("destinationName")),
            AWSMemberEncoding(label: "deviceProfileId", location: .querystring("deviceProfileId")),
            AWSMemberEncoding(label: "fuotaTaskId", location: .querystring("fuotaTaskId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxResults")),
            AWSMemberEncoding(label: "multicastGroupId", location: .querystring("multicastGroupId")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nextToken")),
            AWSMemberEncoding(label: "serviceProfileId", location: .querystring("serviceProfileId")),
            AWSMemberEncoding(label: "wirelessDeviceType", location: .querystring("wirelessDeviceType"))
        ]

        /// A filter to list only the wireless devices that use this destination.
        public let destinationName: String?
        /// A filter to list only the wireless devices that use this device profile.
        public let deviceProfileId: String?
        public let fuotaTaskId: String?
        /// The maximum number of results to return in this operation.
        public let maxResults: Int?
        public let multicastGroupId: String?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?
        /// A filter to list only the wireless devices that use this service profile.
        public let serviceProfileId: String?
        /// A filter to list only the wireless devices that use this wireless device type.
        public let wirelessDeviceType: WirelessDeviceType?

        public init(destinationName: String? = nil, deviceProfileId: String? = nil, fuotaTaskId: String? = nil, maxResults: Int? = nil, multicastGroupId: String? = nil, nextToken: String? = nil, serviceProfileId: String? = nil, wirelessDeviceType: WirelessDeviceType? = nil) {
            self.destinationName = destinationName
            self.deviceProfileId = deviceProfileId
            self.fuotaTaskId = fuotaTaskId
            self.maxResults = maxResults
            self.multicastGroupId = multicastGroupId
            self.nextToken = nextToken
            self.serviceProfileId = serviceProfileId
            self.wirelessDeviceType = wirelessDeviceType
        }

        public func validate(name: String) throws {
            try self.validate(self.destinationName, name: "destinationName", parent: name, max: 128)
            try self.validate(self.destinationName, name: "destinationName", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.deviceProfileId, name: "deviceProfileId", parent: name, max: 256)
            try self.validate(self.fuotaTaskId, name: "fuotaTaskId", parent: name, max: 256)
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.multicastGroupId, name: "multicastGroupId", parent: name, max: 256)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
            try self.validate(self.serviceProfileId, name: "serviceProfileId", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListWirelessDevicesResponse: AWSDecodableShape {
        /// The token to use to get the next set of results, or null if there are no additional results.
        public let nextToken: String?
        /// The ID of the wireless device.
        public let wirelessDeviceList: [WirelessDeviceStatistics]?

        public init(nextToken: String? = nil, wirelessDeviceList: [WirelessDeviceStatistics]? = nil) {
            self.nextToken = nextToken
            self.wirelessDeviceList = wirelessDeviceList
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case wirelessDeviceList = "WirelessDeviceList"
        }
    }

    public struct ListWirelessGatewayTaskDefinitionsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nextToken")),
            AWSMemberEncoding(label: "taskDefinitionType", location: .querystring("taskDefinitionType"))
        ]

        /// The maximum number of results to return in this operation.
        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?
        /// A filter to list only the wireless gateway task definitions that use this task definition type.
        public let taskDefinitionType: WirelessGatewayTaskDefinitionType?

        public init(maxResults: Int? = nil, nextToken: String? = nil, taskDefinitionType: WirelessGatewayTaskDefinitionType? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.taskDefinitionType = taskDefinitionType
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListWirelessGatewayTaskDefinitionsResponse: AWSDecodableShape {
        /// The token to use to get the next set of results, or null if there are no additional results.
        public let nextToken: String?
        /// The list of task definitions.
        public let taskDefinitions: [UpdateWirelessGatewayTaskEntry]?

        public init(nextToken: String? = nil, taskDefinitions: [UpdateWirelessGatewayTaskEntry]? = nil) {
            self.nextToken = nextToken
            self.taskDefinitions = taskDefinitions
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case taskDefinitions = "TaskDefinitions"
        }
    }

    public struct ListWirelessGatewaysRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("nextToken"))
        ]

        /// The maximum number of results to return in this operation.
        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListWirelessGatewaysResponse: AWSDecodableShape {
        /// The token to use to get the next set of results, or null if there are no additional results.
        public let nextToken: String?
        /// The ID of the wireless gateway.
        public let wirelessGatewayList: [WirelessGatewayStatistics]?

        public init(nextToken: String? = nil, wirelessGatewayList: [WirelessGatewayStatistics]? = nil) {
            self.nextToken = nextToken
            self.wirelessGatewayList = wirelessGatewayList
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case wirelessGatewayList = "WirelessGatewayList"
        }
    }

    public struct LoRaWANConnectionStatusEventNotificationConfigurations: AWSEncodableShape & AWSDecodableShape {
        /// Denotes whether the gateway EUI connection status event topic is enabled or disabled.
        public let gatewayEuiEventTopic: EventNotificationTopicStatus?

        public init(gatewayEuiEventTopic: EventNotificationTopicStatus? = nil) {
            self.gatewayEuiEventTopic = gatewayEuiEventTopic
        }

        private enum CodingKeys: String, CodingKey {
            case gatewayEuiEventTopic = "GatewayEuiEventTopic"
        }
    }

    public struct LoRaWANConnectionStatusResourceTypeEventConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Denotes whether the wireless gateway connection status event topic is enabled or disabled.
        public let wirelessGatewayEventTopic: EventNotificationTopicStatus?

        public init(wirelessGatewayEventTopic: EventNotificationTopicStatus? = nil) {
            self.wirelessGatewayEventTopic = wirelessGatewayEventTopic
        }

        private enum CodingKeys: String, CodingKey {
            case wirelessGatewayEventTopic = "WirelessGatewayEventTopic"
        }
    }

    public struct LoRaWANDevice: AWSEncodableShape & AWSDecodableShape {
        /// LoRaWAN object for create APIs
        public let abpV10X: AbpV10X?
        /// ABP device object for create APIs for v1.1
        public let abpV11: AbpV11?
        /// The DevEUI value.
        public let devEui: String?
        /// The ID of the device profile for the new wireless device.
        public let deviceProfileId: String?
        public let fPorts: FPorts?
        /// OTAA device object for create APIs for v1.0.x
        public let otaaV10X: OtaaV10X?
        /// OTAA device object for v1.1 for create APIs
        public let otaaV11: OtaaV11?
        /// The ID of the service profile.
        public let serviceProfileId: String?

        public init(abpV10X: AbpV10X? = nil, abpV11: AbpV11? = nil, devEui: String? = nil, deviceProfileId: String? = nil, fPorts: FPorts? = nil, otaaV10X: OtaaV10X? = nil, otaaV11: OtaaV11? = nil, serviceProfileId: String? = nil) {
            self.abpV10X = abpV10X
            self.abpV11 = abpV11
            self.devEui = devEui
            self.deviceProfileId = deviceProfileId
            self.fPorts = fPorts
            self.otaaV10X = otaaV10X
            self.otaaV11 = otaaV11
            self.serviceProfileId = serviceProfileId
        }

        public func validate(name: String) throws {
            try self.abpV10X?.validate(name: "\(name).abpV10X")
            try self.abpV11?.validate(name: "\(name).abpV11")
            try self.validate(self.devEui, name: "devEui", parent: name, pattern: "^[a-fA-F0-9]{16}$")
            try self.validate(self.deviceProfileId, name: "deviceProfileId", parent: name, max: 256)
            try self.fPorts?.validate(name: "\(name).fPorts")
            try self.otaaV10X?.validate(name: "\(name).otaaV10X")
            try self.otaaV11?.validate(name: "\(name).otaaV11")
            try self.validate(self.serviceProfileId, name: "serviceProfileId", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case abpV10X = "AbpV1_0_x"
            case abpV11 = "AbpV1_1"
            case devEui = "DevEui"
            case deviceProfileId = "DeviceProfileId"
            case fPorts = "FPorts"
            case otaaV10X = "OtaaV1_0_x"
            case otaaV11 = "OtaaV1_1"
            case serviceProfileId = "ServiceProfileId"
        }
    }

    public struct LoRaWANDeviceMetadata: AWSDecodableShape {
        /// The DataRate value.
        public let dataRate: Int?
        /// The DevEUI value.
        public let devEui: String?
        /// The FPort value.
        public let fPort: Int?
        /// The device's channel frequency in Hz.
        public let frequency: Int?
        /// Information about the gateways accessed by the device.
        public let gateways: [LoRaWANGatewayMetadata]?
        /// The date and time of the metadata.
        public let timestamp: String?

        public init(dataRate: Int? = nil, devEui: String? = nil, fPort: Int? = nil, frequency: Int? = nil, gateways: [LoRaWANGatewayMetadata]? = nil, timestamp: String? = nil) {
            self.dataRate = dataRate
            self.devEui = devEui
            self.fPort = fPort
            self.frequency = frequency
            self.gateways = gateways
            self.timestamp = timestamp
        }

        private enum CodingKeys: String, CodingKey {
            case dataRate = "DataRate"
            case devEui = "DevEui"
            case fPort = "FPort"
            case frequency = "Frequency"
            case gateways = "Gateways"
            case timestamp = "Timestamp"
        }
    }

    public struct LoRaWANDeviceProfile: AWSEncodableShape & AWSDecodableShape {
        /// The ClassBTimeout value.
        public let classBTimeout: Int?
        /// The ClassCTimeout value.
        public let classCTimeout: Int?
        /// The list of values that make up the FactoryPresetFreqs value.
        public let factoryPresetFreqsList: [Int]?
        /// The MAC version (such as OTAA 1.1 or OTAA 1.0.3) to use with this device profile.
        public let macVersion: String?
        /// The MaxDutyCycle value.
        public let maxDutyCycle: Int?
        /// The MaxEIRP value.
        public let maxEirp: Int?
        /// The PingSlotDR value.
        public let pingSlotDr: Int?
        /// The PingSlotFreq value.
        public let pingSlotFreq: Int?
        /// The PingSlotPeriod value.
        public let pingSlotPeriod: Int?
        /// The version of regional parameters.
        public let regParamsRevision: String?
        /// The frequency band (RFRegion) value.
        public let rfRegion: String?
        /// The RXDataRate2 value.
        public let rxDataRate2: Int?
        /// The RXDelay1 value.
        public let rxDelay1: Int?
        /// The RXDROffset1 value.
        public let rxDrOffset1: Int?
        /// The RXFreq2 value.
        public let rxFreq2: Int?
        /// The Supports32BitFCnt value.
        public let supports32BitFCnt: Bool?
        /// The SupportsClassB value.
        public let supportsClassB: Bool?
        /// The SupportsClassC value.
        public let supportsClassC: Bool?
        /// The SupportsJoin value.
        public let supportsJoin: Bool?

        public init(classBTimeout: Int? = nil, classCTimeout: Int? = nil, factoryPresetFreqsList: [Int]? = nil, macVersion: String? = nil, maxDutyCycle: Int? = nil, maxEirp: Int? = nil, pingSlotDr: Int? = nil, pingSlotFreq: Int? = nil, pingSlotPeriod: Int? = nil, regParamsRevision: String? = nil, rfRegion: String? = nil, rxDataRate2: Int? = nil, rxDelay1: Int? = nil, rxDrOffset1: Int? = nil, rxFreq2: Int? = nil, supports32BitFCnt: Bool? = nil, supportsClassB: Bool? = nil, supportsClassC: Bool? = nil, supportsJoin: Bool? = nil) {
            self.classBTimeout = classBTimeout
            self.classCTimeout = classCTimeout
            self.factoryPresetFreqsList = factoryPresetFreqsList
            self.macVersion = macVersion
            self.maxDutyCycle = maxDutyCycle
            self.maxEirp = maxEirp
            self.pingSlotDr = pingSlotDr
            self.pingSlotFreq = pingSlotFreq
            self.pingSlotPeriod = pingSlotPeriod
            self.regParamsRevision = regParamsRevision
            self.rfRegion = rfRegion
            self.rxDataRate2 = rxDataRate2
            self.rxDelay1 = rxDelay1
            self.rxDrOffset1 = rxDrOffset1
            self.rxFreq2 = rxFreq2
            self.supports32BitFCnt = supports32BitFCnt
            self.supportsClassB = supportsClassB
            self.supportsClassC = supportsClassC
            self.supportsJoin = supportsJoin
        }

        public func validate(name: String) throws {
            try self.validate(self.classBTimeout, name: "classBTimeout", parent: name, max: 1000)
            try self.validate(self.classBTimeout, name: "classBTimeout", parent: name, min: 0)
            try self.validate(self.classCTimeout, name: "classCTimeout", parent: name, max: 1000)
            try self.validate(self.classCTimeout, name: "classCTimeout", parent: name, min: 0)
            try self.factoryPresetFreqsList?.forEach {
                try validate($0, name: "factoryPresetFreqsList[]", parent: name, max: 16_700_000)
                try validate($0, name: "factoryPresetFreqsList[]", parent: name, min: 1_000_000)
            }
            try self.validate(self.factoryPresetFreqsList, name: "factoryPresetFreqsList", parent: name, max: 20)
            try self.validate(self.macVersion, name: "macVersion", parent: name, max: 64)
            try self.validate(self.maxDutyCycle, name: "maxDutyCycle", parent: name, max: 100)
            try self.validate(self.maxDutyCycle, name: "maxDutyCycle", parent: name, min: 0)
            try self.validate(self.maxEirp, name: "maxEirp", parent: name, max: 15)
            try self.validate(self.maxEirp, name: "maxEirp", parent: name, min: 0)
            try self.validate(self.pingSlotDr, name: "pingSlotDr", parent: name, max: 15)
            try self.validate(self.pingSlotDr, name: "pingSlotDr", parent: name, min: 0)
            try self.validate(self.pingSlotFreq, name: "pingSlotFreq", parent: name, max: 16_700_000)
            try self.validate(self.pingSlotFreq, name: "pingSlotFreq", parent: name, min: 1_000_000)
            try self.validate(self.pingSlotPeriod, name: "pingSlotPeriod", parent: name, max: 4096)
            try self.validate(self.pingSlotPeriod, name: "pingSlotPeriod", parent: name, min: 128)
            try self.validate(self.regParamsRevision, name: "regParamsRevision", parent: name, max: 64)
            try self.validate(self.rfRegion, name: "rfRegion", parent: name, max: 64)
            try self.validate(self.rxDataRate2, name: "rxDataRate2", parent: name, max: 15)
            try self.validate(self.rxDataRate2, name: "rxDataRate2", parent: name, min: 0)
            try self.validate(self.rxDelay1, name: "rxDelay1", parent: name, max: 15)
            try self.validate(self.rxDelay1, name: "rxDelay1", parent: name, min: 0)
            try self.validate(self.rxDrOffset1, name: "rxDrOffset1", parent: name, max: 7)
            try self.validate(self.rxDrOffset1, name: "rxDrOffset1", parent: name, min: 0)
            try self.validate(self.rxFreq2, name: "rxFreq2", parent: name, max: 16_700_000)
            try self.validate(self.rxFreq2, name: "rxFreq2", parent: name, min: 1_000_000)
        }

        private enum CodingKeys: String, CodingKey {
            case classBTimeout = "ClassBTimeout"
            case classCTimeout = "ClassCTimeout"
            case factoryPresetFreqsList = "FactoryPresetFreqsList"
            case macVersion = "MacVersion"
            case maxDutyCycle = "MaxDutyCycle"
            case maxEirp = "MaxEirp"
            case pingSlotDr = "PingSlotDr"
            case pingSlotFreq = "PingSlotFreq"
            case pingSlotPeriod = "PingSlotPeriod"
            case regParamsRevision = "RegParamsRevision"
            case rfRegion = "RfRegion"
            case rxDataRate2 = "RxDataRate2"
            case rxDelay1 = "RxDelay1"
            case rxDrOffset1 = "RxDrOffset1"
            case rxFreq2 = "RxFreq2"
            case supports32BitFCnt = "Supports32BitFCnt"
            case supportsClassB = "SupportsClassB"
            case supportsClassC = "SupportsClassC"
            case supportsJoin = "SupportsJoin"
        }
    }

    public struct LoRaWANFuotaTask: AWSEncodableShape {
        public let rfRegion: SupportedRfRegion?

        public init(rfRegion: SupportedRfRegion? = nil) {
            self.rfRegion = rfRegion
        }

        private enum CodingKeys: String, CodingKey {
            case rfRegion = "RfRegion"
        }
    }

    public struct LoRaWANFuotaTaskGetInfo: AWSDecodableShape {
        public let rfRegion: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var startTime: Date?

        public init(rfRegion: String? = nil, startTime: Date? = nil) {
            self.rfRegion = rfRegion
            self.startTime = startTime
        }

        private enum CodingKeys: String, CodingKey {
            case rfRegion = "RfRegion"
            case startTime = "StartTime"
        }
    }

    public struct LoRaWANGateway: AWSEncodableShape & AWSDecodableShape {
        /// Beaconing object information, which consists of the data rate and frequency parameters.
        public let beaconing: Beaconing?
        /// The gateway's EUI value.
        public let gatewayEui: String?
        public let joinEuiFilters: [[String]]?
        public let netIdFilters: [String]?
        /// The frequency band (RFRegion) value.
        public let rfRegion: String?
        public let subBands: [Int]?

        public init(beaconing: Beaconing? = nil, gatewayEui: String? = nil, joinEuiFilters: [[String]]? = nil, netIdFilters: [String]? = nil, rfRegion: String? = nil, subBands: [Int]? = nil) {
            self.beaconing = beaconing
            self.gatewayEui = gatewayEui
            self.joinEuiFilters = joinEuiFilters
            self.netIdFilters = netIdFilters
            self.rfRegion = rfRegion
            self.subBands = subBands
        }

        public func validate(name: String) throws {
            try self.beaconing?.validate(name: "\(name).beaconing")
            try self.validate(self.gatewayEui, name: "gatewayEui", parent: name, pattern: "^(([0-9A-Fa-f]{2}-){7}|([0-9A-Fa-f]{2}:){7}|([0-9A-Fa-f]{2}\\s){7}|([0-9A-Fa-f]{2}){7})([0-9A-Fa-f]{2})$")
            try self.joinEuiFilters?.forEach {
                try validate($0, name: "joinEuiFilters[]", parent: name, max: 2)
                try validate($0, name: "joinEuiFilters[]", parent: name, min: 2)
            }
            try self.validate(self.joinEuiFilters, name: "joinEuiFilters", parent: name, max: 3)
            try self.netIdFilters?.forEach {
                try validate($0, name: "netIdFilters[]", parent: name, pattern: "^[a-fA-F0-9]{6}$")
            }
            try self.validate(self.netIdFilters, name: "netIdFilters", parent: name, max: 10)
            try self.validate(self.rfRegion, name: "rfRegion", parent: name, max: 64)
            try self.subBands?.forEach {
                try validate($0, name: "subBands[]", parent: name, max: 8)
                try validate($0, name: "subBands[]", parent: name, min: 1)
            }
            try self.validate(self.subBands, name: "subBands", parent: name, max: 8)
        }

        private enum CodingKeys: String, CodingKey {
            case beaconing = "Beaconing"
            case gatewayEui = "GatewayEui"
            case joinEuiFilters = "JoinEuiFilters"
            case netIdFilters = "NetIdFilters"
            case rfRegion = "RfRegion"
            case subBands = "SubBands"
        }
    }

    public struct LoRaWANGatewayCurrentVersion: AWSDecodableShape {
        /// The version of the gateways that should receive the update.
        public let currentVersion: LoRaWANGatewayVersion?

        public init(currentVersion: LoRaWANGatewayVersion? = nil) {
            self.currentVersion = currentVersion
        }

        private enum CodingKeys: String, CodingKey {
            case currentVersion = "CurrentVersion"
        }
    }

    public struct LoRaWANGatewayMetadata: AWSDecodableShape {
        /// The gateway's EUI value.
        public let gatewayEui: String?
        /// The RSSI value.
        public let rssi: Double?
        /// The SNR value.
        public let snr: Double?

        public init(gatewayEui: String? = nil, rssi: Double? = nil, snr: Double? = nil) {
            self.gatewayEui = gatewayEui
            self.rssi = rssi
            self.snr = snr
        }

        private enum CodingKeys: String, CodingKey {
            case gatewayEui = "GatewayEui"
            case rssi = "Rssi"
            case snr = "Snr"
        }
    }

    public struct LoRaWANGatewayVersion: AWSEncodableShape & AWSDecodableShape {
        /// The model number of the wireless gateway.
        public let model: String?
        /// The version of the wireless gateway firmware.
        public let packageVersion: String?
        /// The basic station version of the wireless gateway.
        public let station: String?

        public init(model: String? = nil, packageVersion: String? = nil, station: String? = nil) {
            self.model = model
            self.packageVersion = packageVersion
            self.station = station
        }

        public func validate(name: String) throws {
            try self.validate(self.model, name: "model", parent: name, max: 4096)
            try self.validate(self.model, name: "model", parent: name, min: 1)
            try self.validate(self.packageVersion, name: "packageVersion", parent: name, max: 32)
            try self.validate(self.packageVersion, name: "packageVersion", parent: name, min: 1)
            try self.validate(self.station, name: "station", parent: name, max: 4096)
            try self.validate(self.station, name: "station", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case model = "Model"
            case packageVersion = "PackageVersion"
            case station = "Station"
        }
    }

    public struct LoRaWANGetServiceProfileInfo: AWSDecodableShape {
        /// The AddGWMetaData value.
        public let addGwMetadata: Bool?
        /// The ChannelMask value.
        public let channelMask: String?
        /// The DevStatusReqFreq value.
        public let devStatusReqFreq: Int?
        /// The DLBucketSize value.
        public let dlBucketSize: Int?
        /// The DLRate value.
        public let dlRate: Int?
        /// The DLRatePolicy value.
        public let dlRatePolicy: String?
        /// The DRMax value.
        public let drMax: Int?
        /// The DRMin value.
        public let drMin: Int?
        /// The HRAllowed value that describes whether handover roaming is allowed.
        public let hrAllowed: Bool?
        /// The MinGwDiversity value.
        public let minGwDiversity: Int?
        /// The NwkGeoLoc value.
        public let nwkGeoLoc: Bool?
        /// The PRAllowed value that describes whether passive roaming is allowed.
        public let prAllowed: Bool?
        /// The RAAllowed value that describes whether roaming activation is allowed.
        public let raAllowed: Bool?
        /// The ReportDevStatusBattery value.
        public let reportDevStatusBattery: Bool?
        /// The ReportDevStatusMargin value.
        public let reportDevStatusMargin: Bool?
        /// The TargetPER value.
        public let targetPer: Int?
        /// The ULBucketSize value.
        public let ulBucketSize: Int?
        /// The ULRate value.
        public let ulRate: Int?
        /// The ULRatePolicy value.
        public let ulRatePolicy: String?

        public init(addGwMetadata: Bool? = nil, channelMask: String? = nil, devStatusReqFreq: Int? = nil, dlBucketSize: Int? = nil, dlRate: Int? = nil, dlRatePolicy: String? = nil, drMax: Int? = nil, drMin: Int? = nil, hrAllowed: Bool? = nil, minGwDiversity: Int? = nil, nwkGeoLoc: Bool? = nil, prAllowed: Bool? = nil, raAllowed: Bool? = nil, reportDevStatusBattery: Bool? = nil, reportDevStatusMargin: Bool? = nil, targetPer: Int? = nil, ulBucketSize: Int? = nil, ulRate: Int? = nil, ulRatePolicy: String? = nil) {
            self.addGwMetadata = addGwMetadata
            self.channelMask = channelMask
            self.devStatusReqFreq = devStatusReqFreq
            self.dlBucketSize = dlBucketSize
            self.dlRate = dlRate
            self.dlRatePolicy = dlRatePolicy
            self.drMax = drMax
            self.drMin = drMin
            self.hrAllowed = hrAllowed
            self.minGwDiversity = minGwDiversity
            self.nwkGeoLoc = nwkGeoLoc
            self.prAllowed = prAllowed
            self.raAllowed = raAllowed
            self.reportDevStatusBattery = reportDevStatusBattery
            self.reportDevStatusMargin = reportDevStatusMargin
            self.targetPer = targetPer
            self.ulBucketSize = ulBucketSize
            self.ulRate = ulRate
            self.ulRatePolicy = ulRatePolicy
        }

        private enum CodingKeys: String, CodingKey {
            case addGwMetadata = "AddGwMetadata"
            case channelMask = "ChannelMask"
            case devStatusReqFreq = "DevStatusReqFreq"
            case dlBucketSize = "DlBucketSize"
            case dlRate = "DlRate"
            case dlRatePolicy = "DlRatePolicy"
            case drMax = "DrMax"
            case drMin = "DrMin"
            case hrAllowed = "HrAllowed"
            case minGwDiversity = "MinGwDiversity"
            case nwkGeoLoc = "NwkGeoLoc"
            case prAllowed = "PrAllowed"
            case raAllowed = "RaAllowed"
            case reportDevStatusBattery = "ReportDevStatusBattery"
            case reportDevStatusMargin = "ReportDevStatusMargin"
            case targetPer = "TargetPer"
            case ulBucketSize = "UlBucketSize"
            case ulRate = "UlRate"
            case ulRatePolicy = "UlRatePolicy"
        }
    }

    public struct LoRaWANJoinEventNotificationConfigurations: AWSEncodableShape & AWSDecodableShape {
        /// Denotes whether the Dev EUI join event topic is enabled or disabled.
        public let devEuiEventTopic: EventNotificationTopicStatus?

        public init(devEuiEventTopic: EventNotificationTopicStatus? = nil) {
            self.devEuiEventTopic = devEuiEventTopic
        }

        private enum CodingKeys: String, CodingKey {
            case devEuiEventTopic = "DevEuiEventTopic"
        }
    }

    public struct LoRaWANJoinResourceTypeEventConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Denotes whether the wireless device join event topic is enabled or disabled.
        public let wirelessDeviceEventTopic: EventNotificationTopicStatus?

        public init(wirelessDeviceEventTopic: EventNotificationTopicStatus? = nil) {
            self.wirelessDeviceEventTopic = wirelessDeviceEventTopic
        }

        private enum CodingKeys: String, CodingKey {
            case wirelessDeviceEventTopic = "WirelessDeviceEventTopic"
        }
    }

    public struct LoRaWANListDevice: AWSDecodableShape {
        /// The DevEUI value.
        public let devEui: String?

        public init(devEui: String? = nil) {
            self.devEui = devEui
        }

        private enum CodingKeys: String, CodingKey {
            case devEui = "DevEui"
        }
    }

    public struct LoRaWANMulticast: AWSEncodableShape {
        public let dlClass: DlClass?
        public let rfRegion: SupportedRfRegion?

        public init(dlClass: DlClass? = nil, rfRegion: SupportedRfRegion? = nil) {
            self.dlClass = dlClass
            self.rfRegion = rfRegion
        }

        private enum CodingKeys: String, CodingKey {
            case dlClass = "DlClass"
            case rfRegion = "RfRegion"
        }
    }

    public struct LoRaWANMulticastGet: AWSDecodableShape {
        public let dlClass: DlClass?
        public let numberOfDevicesInGroup: Int?
        public let numberOfDevicesRequested: Int?
        public let rfRegion: SupportedRfRegion?

        public init(dlClass: DlClass? = nil, numberOfDevicesInGroup: Int? = nil, numberOfDevicesRequested: Int? = nil, rfRegion: SupportedRfRegion? = nil) {
            self.dlClass = dlClass
            self.numberOfDevicesInGroup = numberOfDevicesInGroup
            self.numberOfDevicesRequested = numberOfDevicesRequested
            self.rfRegion = rfRegion
        }

        private enum CodingKeys: String, CodingKey {
            case dlClass = "DlClass"
            case numberOfDevicesInGroup = "NumberOfDevicesInGroup"
            case numberOfDevicesRequested = "NumberOfDevicesRequested"
            case rfRegion = "RfRegion"
        }
    }

    public struct LoRaWANMulticastMetadata: AWSEncodableShape {
        public let fPort: Int?

        public init(fPort: Int? = nil) {
            self.fPort = fPort
        }

        public func validate(name: String) throws {
            try self.validate(self.fPort, name: "fPort", parent: name, max: 223)
            try self.validate(self.fPort, name: "fPort", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case fPort = "FPort"
        }
    }

    public struct LoRaWANMulticastSession: AWSEncodableShape & AWSDecodableShape {
        public let dlDr: Int?
        public let dlFreq: Int?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var sessionStartTime: Date?
        public let sessionTimeout: Int?

        public init(dlDr: Int? = nil, dlFreq: Int? = nil, sessionStartTime: Date? = nil, sessionTimeout: Int? = nil) {
            self.dlDr = dlDr
            self.dlFreq = dlFreq
            self.sessionStartTime = sessionStartTime
            self.sessionTimeout = sessionTimeout
        }

        public func validate(name: String) throws {
            try self.validate(self.dlDr, name: "dlDr", parent: name, max: 15)
            try self.validate(self.dlDr, name: "dlDr", parent: name, min: 0)
            try self.validate(self.dlFreq, name: "dlFreq", parent: name, max: 1_000_000_000)
            try self.validate(self.dlFreq, name: "dlFreq", parent: name, min: 100_000_000)
            try self.validate(self.sessionTimeout, name: "sessionTimeout", parent: name, max: 172_800)
            try self.validate(self.sessionTimeout, name: "sessionTimeout", parent: name, min: 60)
        }

        private enum CodingKeys: String, CodingKey {
            case dlDr = "DlDr"
            case dlFreq = "DlFreq"
            case sessionStartTime = "SessionStartTime"
            case sessionTimeout = "SessionTimeout"
        }
    }

    public struct LoRaWANSendDataToDevice: AWSEncodableShape & AWSDecodableShape {
        public let fPort: Int?
        /// Choose the gateways that you want to use for the downlink data traffic when the wireless device is running in class B or class C mode.
        public let participatingGateways: ParticipatingGateways?

        public init(fPort: Int? = nil, participatingGateways: ParticipatingGateways? = nil) {
            self.fPort = fPort
            self.participatingGateways = participatingGateways
        }

        public func validate(name: String) throws {
            try self.validate(self.fPort, name: "fPort", parent: name, max: 223)
            try self.validate(self.fPort, name: "fPort", parent: name, min: 1)
            try self.participatingGateways?.validate(name: "\(name).participatingGateways")
        }

        private enum CodingKeys: String, CodingKey {
            case fPort = "FPort"
            case participatingGateways = "ParticipatingGateways"
        }
    }

    public struct LoRaWANServiceProfile: AWSEncodableShape {
        /// The AddGWMetaData value.
        public let addGwMetadata: Bool?
        /// The DrMax value.
        public let drMax: Int?
        /// The DrMin value.
        public let drMin: Int?

        public init(addGwMetadata: Bool? = nil, drMax: Int? = nil, drMin: Int? = nil) {
            self.addGwMetadata = addGwMetadata
            self.drMax = drMax
            self.drMin = drMin
        }

        public func validate(name: String) throws {
            try self.validate(self.drMax, name: "drMax", parent: name, max: 15)
            try self.validate(self.drMax, name: "drMax", parent: name, min: 0)
            try self.validate(self.drMin, name: "drMin", parent: name, max: 15)
            try self.validate(self.drMin, name: "drMin", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case addGwMetadata = "AddGwMetadata"
            case drMax = "DrMax"
            case drMin = "DrMin"
        }
    }

    public struct LoRaWANStartFuotaTask: AWSEncodableShape {
        @OptionalCustomCoding<ISO8601DateCoder>
        public var startTime: Date?

        public init(startTime: Date? = nil) {
            self.startTime = startTime
        }

        private enum CodingKeys: String, CodingKey {
            case startTime = "StartTime"
        }
    }

    public struct LoRaWANUpdateDevice: AWSEncodableShape {
        /// ABP device object for update APIs for v1.0.x
        public let abpV10X: UpdateAbpV10X?
        /// ABP device object for update APIs for v1.1
        public let abpV11: UpdateAbpV11?
        /// The ID of the device profile for the wireless device.
        public let deviceProfileId: String?
        /// FPorts object for the positioning information of the device.
        public let fPorts: UpdateFPorts?
        /// The ID of the service profile.
        public let serviceProfileId: String?

        public init(abpV10X: UpdateAbpV10X? = nil, abpV11: UpdateAbpV11? = nil, deviceProfileId: String? = nil, fPorts: UpdateFPorts? = nil, serviceProfileId: String? = nil) {
            self.abpV10X = abpV10X
            self.abpV11 = abpV11
            self.deviceProfileId = deviceProfileId
            self.fPorts = fPorts
            self.serviceProfileId = serviceProfileId
        }

        public func validate(name: String) throws {
            try self.abpV10X?.validate(name: "\(name).abpV10X")
            try self.abpV11?.validate(name: "\(name).abpV11")
            try self.validate(self.deviceProfileId, name: "deviceProfileId", parent: name, max: 256)
            try self.fPorts?.validate(name: "\(name).fPorts")
            try self.validate(self.serviceProfileId, name: "serviceProfileId", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case abpV10X = "AbpV1_0_x"
            case abpV11 = "AbpV1_1"
            case deviceProfileId = "DeviceProfileId"
            case fPorts = "FPorts"
            case serviceProfileId = "ServiceProfileId"
        }
    }

    public struct LoRaWANUpdateGatewayTaskCreate: AWSEncodableShape & AWSDecodableShape {
        /// The version of the gateways that should receive the update.
        public let currentVersion: LoRaWANGatewayVersion?
        /// The CRC of the signature private key to check.
        public let sigKeyCrc: Int64?
        /// The signature used to verify the update firmware.
        public let updateSignature: String?
        /// The firmware version to update the gateway to.
        public let updateVersion: LoRaWANGatewayVersion?

        public init(currentVersion: LoRaWANGatewayVersion? = nil, sigKeyCrc: Int64? = nil, updateSignature: String? = nil, updateVersion: LoRaWANGatewayVersion? = nil) {
            self.currentVersion = currentVersion
            self.sigKeyCrc = sigKeyCrc
            self.updateSignature = updateSignature
            self.updateVersion = updateVersion
        }

        public func validate(name: String) throws {
            try self.currentVersion?.validate(name: "\(name).currentVersion")
            try self.validate(self.sigKeyCrc, name: "sigKeyCrc", parent: name, max: 4_294_967_295)
            try self.validate(self.sigKeyCrc, name: "sigKeyCrc", parent: name, min: 1)
            try self.validate(self.updateSignature, name: "updateSignature", parent: name, max: 4096)
            try self.validate(self.updateSignature, name: "updateSignature", parent: name, min: 1)
            try self.updateVersion?.validate(name: "\(name).updateVersion")
        }

        private enum CodingKeys: String, CodingKey {
            case currentVersion = "CurrentVersion"
            case sigKeyCrc = "SigKeyCrc"
            case updateSignature = "UpdateSignature"
            case updateVersion = "UpdateVersion"
        }
    }

    public struct LoRaWANUpdateGatewayTaskEntry: AWSDecodableShape {
        /// The version of the gateways that should receive the update.
        public let currentVersion: LoRaWANGatewayVersion?
        /// The firmware version to update the gateway to.
        public let updateVersion: LoRaWANGatewayVersion?

        public init(currentVersion: LoRaWANGatewayVersion? = nil, updateVersion: LoRaWANGatewayVersion? = nil) {
            self.currentVersion = currentVersion
            self.updateVersion = updateVersion
        }

        private enum CodingKeys: String, CodingKey {
            case currentVersion = "CurrentVersion"
            case updateVersion = "UpdateVersion"
        }
    }

    public struct LteLocalId: AWSEncodableShape {
        /// Evolved universal terrestrial radio access (E-UTRA) absolute radio frequency channel number (FCN).
        public let earfcn: Int
        /// Physical cell ID.
        public let pci: Int

        public init(earfcn: Int, pci: Int) {
            self.earfcn = earfcn
            self.pci = pci
        }

        public func validate(name: String) throws {
            try self.validate(self.earfcn, name: "earfcn", parent: name, max: 262_143)
            try self.validate(self.earfcn, name: "earfcn", parent: name, min: 0)
            try self.validate(self.pci, name: "pci", parent: name, max: 503)
            try self.validate(self.pci, name: "pci", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case earfcn = "Earfcn"
            case pci = "Pci"
        }
    }

    public struct LteNmrObj: AWSEncodableShape {
        /// E-UTRA (Evolved universal terrestrial Radio Access) absolute radio frequency channel Number (EARFCN).
        public let earfcn: Int
        /// E-UTRAN (Evolved Universal Terrestrial Radio Access Network) cell global identifier (EUTRANCID).
        public let eutranCid: Int
        /// Physical cell ID.
        public let pci: Int
        /// Signal power of the reference signal received, measured in dBm (decibel-milliwatts).
        public let rsrp: Int?
        /// Signal quality of the reference Signal received, measured in decibels (dB).
        public let rsrq: Float?

        public init(earfcn: Int, eutranCid: Int, pci: Int, rsrp: Int? = nil, rsrq: Float? = nil) {
            self.earfcn = earfcn
            self.eutranCid = eutranCid
            self.pci = pci
            self.rsrp = rsrp
            self.rsrq = rsrq
        }

        public func validate(name: String) throws {
            try self.validate(self.earfcn, name: "earfcn", parent: name, max: 262_143)
            try self.validate(self.earfcn, name: "earfcn", parent: name, min: 0)
            try self.validate(self.eutranCid, name: "eutranCid", parent: name, max: 268_435_455)
            try self.validate(self.eutranCid, name: "eutranCid", parent: name, min: 0)
            try self.validate(self.pci, name: "pci", parent: name, max: 503)
            try self.validate(self.pci, name: "pci", parent: name, min: 0)
            try self.validate(self.rsrp, name: "rsrp", parent: name, max: -44)
            try self.validate(self.rsrp, name: "rsrp", parent: name, min: -140)
            try self.validate(self.rsrq, name: "rsrq", parent: name, max: -3.0)
            try self.validate(self.rsrq, name: "rsrq", parent: name, min: -19.5)
        }

        private enum CodingKeys: String, CodingKey {
            case earfcn = "Earfcn"
            case eutranCid = "EutranCid"
            case pci = "Pci"
            case rsrp = "Rsrp"
            case rsrq = "Rsrq"
        }
    }

    public struct LteObj: AWSEncodableShape {
        /// E-UTRAN (Evolved Universal Terrestrial Radio Access Network) Cell Global Identifier.
        public let eutranCid: Int
        /// LTE local identification (local ID) information.
        public let lteLocalId: LteLocalId?
        /// LTE object for network measurement reports.
        public let lteNmr: [LteNmrObj]?
        /// LTE timing advance.
        public let lteTimingAdvance: Int?
        /// Mobile Country Code.
        public let mcc: Int
        /// Mobile Network Code.
        public let mnc: Int
        /// Parameter that determines whether the LTE object is capable of supporting NR (new radio).
        public let nrCapable: Bool?
        /// Signal power of the reference signal received, measured in dBm (decibel-milliwatts).
        public let rsrp: Int?
        /// Signal quality of the reference Signal received, measured in decibels (dB).
        public let rsrq: Float?
        /// LTE tracking area code.
        public let tac: Int?

        public init(eutranCid: Int, lteLocalId: LteLocalId? = nil, lteNmr: [LteNmrObj]? = nil, lteTimingAdvance: Int? = nil, mcc: Int, mnc: Int, nrCapable: Bool? = nil, rsrp: Int? = nil, rsrq: Float? = nil, tac: Int? = nil) {
            self.eutranCid = eutranCid
            self.lteLocalId = lteLocalId
            self.lteNmr = lteNmr
            self.lteTimingAdvance = lteTimingAdvance
            self.mcc = mcc
            self.mnc = mnc
            self.nrCapable = nrCapable
            self.rsrp = rsrp
            self.rsrq = rsrq
            self.tac = tac
        }

        public func validate(name: String) throws {
            try self.validate(self.eutranCid, name: "eutranCid", parent: name, max: 268_435_455)
            try self.validate(self.eutranCid, name: "eutranCid", parent: name, min: 0)
            try self.lteLocalId?.validate(name: "\(name).lteLocalId")
            try self.lteNmr?.forEach {
                try $0.validate(name: "\(name).lteNmr[]")
            }
            try self.validate(self.lteNmr, name: "lteNmr", parent: name, max: 32)
            try self.validate(self.lteNmr, name: "lteNmr", parent: name, min: 1)
            try self.validate(self.lteTimingAdvance, name: "lteTimingAdvance", parent: name, max: 1282)
            try self.validate(self.lteTimingAdvance, name: "lteTimingAdvance", parent: name, min: 0)
            try self.validate(self.mcc, name: "mcc", parent: name, max: 999)
            try self.validate(self.mcc, name: "mcc", parent: name, min: 200)
            try self.validate(self.mnc, name: "mnc", parent: name, max: 999)
            try self.validate(self.mnc, name: "mnc", parent: name, min: 0)
            try self.validate(self.rsrp, name: "rsrp", parent: name, max: -44)
            try self.validate(self.rsrp, name: "rsrp", parent: name, min: -140)
            try self.validate(self.rsrq, name: "rsrq", parent: name, max: -3.0)
            try self.validate(self.rsrq, name: "rsrq", parent: name, min: -19.5)
            try self.validate(self.tac, name: "tac", parent: name, max: 65535)
            try self.validate(self.tac, name: "tac", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case eutranCid = "EutranCid"
            case lteLocalId = "LteLocalId"
            case lteNmr = "LteNmr"
            case lteTimingAdvance = "LteTimingAdvance"
            case mcc = "Mcc"
            case mnc = "Mnc"
            case nrCapable = "NrCapable"
            case rsrp = "Rsrp"
            case rsrq = "Rsrq"
            case tac = "Tac"
        }
    }

    public struct MessageDeliveryStatusEventConfiguration: AWSEncodableShape & AWSDecodableShape {
        public let sidewalk: SidewalkEventNotificationConfigurations?
        /// Denotes whether the wireless device ID message delivery status event topic is enabled or disabled.
        public let wirelessDeviceIdEventTopic: EventNotificationTopicStatus?

        public init(sidewalk: SidewalkEventNotificationConfigurations? = nil, wirelessDeviceIdEventTopic: EventNotificationTopicStatus? = nil) {
            self.sidewalk = sidewalk
            self.wirelessDeviceIdEventTopic = wirelessDeviceIdEventTopic
        }

        private enum CodingKeys: String, CodingKey {
            case sidewalk = "Sidewalk"
            case wirelessDeviceIdEventTopic = "WirelessDeviceIdEventTopic"
        }
    }

    public struct MessageDeliveryStatusResourceTypeEventConfiguration: AWSEncodableShape & AWSDecodableShape {
        public let sidewalk: SidewalkResourceTypeEventConfiguration?

        public init(sidewalk: SidewalkResourceTypeEventConfiguration? = nil) {
            self.sidewalk = sidewalk
        }

        private enum CodingKeys: String, CodingKey {
            case sidewalk = "Sidewalk"
        }
    }

    public struct MulticastGroup: AWSDecodableShape {
        public let arn: String?
        public let id: String?
        public let name: String?

        public init(arn: String? = nil, id: String? = nil, name: String? = nil) {
            self.arn = arn
            self.id = id
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
            case name = "Name"
        }
    }

    public struct MulticastGroupByFuotaTask: AWSDecodableShape {
        public let id: String?

        public init(id: String? = nil) {
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case id = "Id"
        }
    }

    public struct MulticastWirelessMetadata: AWSEncodableShape {
        public let loRaWAN: LoRaWANMulticastMetadata?

        public init(loRaWAN: LoRaWANMulticastMetadata? = nil) {
            self.loRaWAN = loRaWAN
        }

        public func validate(name: String) throws {
            try self.loRaWAN?.validate(name: "\(name).loRaWAN")
        }

        private enum CodingKeys: String, CodingKey {
            case loRaWAN = "LoRaWAN"
        }
    }

    public struct NetworkAnalyzerConfigurations: AWSDecodableShape {
        /// The Amazon Resource Name of the new resource.
        public let arn: String?
        public let name: String?

        public init(arn: String? = nil, name: String? = nil) {
            self.arn = arn
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case name = "Name"
        }
    }

    public struct OtaaV10X: AWSEncodableShape & AWSDecodableShape {
        /// The AppEUI value.
        public let appEui: String?
        /// The AppKey value.
        public let appKey: String?
        /// The GenAppKey value.
        public let genAppKey: String?

        public init(appEui: String? = nil, appKey: String? = nil, genAppKey: String? = nil) {
            self.appEui = appEui
            self.appKey = appKey
            self.genAppKey = genAppKey
        }

        public func validate(name: String) throws {
            try self.validate(self.appEui, name: "appEui", parent: name, pattern: "^[a-fA-F0-9]{16}$")
            try self.validate(self.appKey, name: "appKey", parent: name, pattern: "^[a-fA-F0-9]{32}$")
            try self.validate(self.genAppKey, name: "genAppKey", parent: name, pattern: "^[a-fA-F0-9]{32}$")
        }

        private enum CodingKeys: String, CodingKey {
            case appEui = "AppEui"
            case appKey = "AppKey"
            case genAppKey = "GenAppKey"
        }
    }

    public struct OtaaV11: AWSEncodableShape & AWSDecodableShape {
        /// The AppKey value.
        public let appKey: String?
        /// The JoinEUI value.
        public let joinEui: String?
        /// The NwkKey value.
        public let nwkKey: String?

        public init(appKey: String? = nil, joinEui: String? = nil, nwkKey: String? = nil) {
            self.appKey = appKey
            self.joinEui = joinEui
            self.nwkKey = nwkKey
        }

        public func validate(name: String) throws {
            try self.validate(self.appKey, name: "appKey", parent: name, pattern: "^[a-fA-F0-9]{32}$")
            try self.validate(self.joinEui, name: "joinEui", parent: name, pattern: "^[a-fA-F0-9]{16}$")
            try self.validate(self.nwkKey, name: "nwkKey", parent: name, pattern: "^[a-fA-F0-9]{32}$")
        }

        private enum CodingKeys: String, CodingKey {
            case appKey = "AppKey"
            case joinEui = "JoinEui"
            case nwkKey = "NwkKey"
        }
    }

    public struct ParticipatingGateways: AWSEncodableShape & AWSDecodableShape {
        /// Indicates whether to send the downlink message in sequential mode or concurrent mode, or to use only the chosen gateways from the previous uplink message transmission.
        public let downlinkMode: DownlinkMode
        /// The list of gateways that you want to use for sending the downlink data traffic.
        public let gatewayList: [GatewayListItem]
        /// The duration of time for which AWS IoT Core for LoRaWAN will wait before transmitting the payload to the next gateway.
        public let transmissionInterval: Int

        public init(downlinkMode: DownlinkMode, gatewayList: [GatewayListItem], transmissionInterval: Int) {
            self.downlinkMode = downlinkMode
            self.gatewayList = gatewayList
            self.transmissionInterval = transmissionInterval
        }

        public func validate(name: String) throws {
            try self.gatewayList.forEach {
                try $0.validate(name: "\(name).gatewayList[]")
            }
            try self.validate(self.transmissionInterval, name: "transmissionInterval", parent: name, max: 604_800)
            try self.validate(self.transmissionInterval, name: "transmissionInterval", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case downlinkMode = "DownlinkMode"
            case gatewayList = "GatewayList"
            case transmissionInterval = "TransmissionInterval"
        }
    }

    public struct PositionConfigurationItem: AWSDecodableShape {
        /// The position data destination that describes the AWS IoT rule that processes the device's position  data for use by AWS IoT Core for LoRaWAN.
        public let destination: String?
        /// Resource identifier for the position configuration.
        public let resourceIdentifier: String?
        /// Resource type of the resource for the position configuration.
        public let resourceType: PositionResourceType?
        /// The details of the positioning solver object used to compute the location.
        public let solvers: PositionSolverDetails?

        public init(destination: String? = nil, resourceIdentifier: String? = nil, resourceType: PositionResourceType? = nil, solvers: PositionSolverDetails? = nil) {
            self.destination = destination
            self.resourceIdentifier = resourceIdentifier
            self.resourceType = resourceType
            self.solvers = solvers
        }

        private enum CodingKeys: String, CodingKey {
            case destination = "Destination"
            case resourceIdentifier = "ResourceIdentifier"
            case resourceType = "ResourceType"
            case solvers = "Solvers"
        }
    }

    public struct PositionSolverConfigurations: AWSEncodableShape {
        /// The Semtech GNSS solver configuration object.
        public let semtechGnss: SemtechGnssConfiguration?

        public init(semtechGnss: SemtechGnssConfiguration? = nil) {
            self.semtechGnss = semtechGnss
        }

        private enum CodingKeys: String, CodingKey {
            case semtechGnss = "SemtechGnss"
        }
    }

    public struct PositionSolverDetails: AWSDecodableShape {
        /// The Semtech GNSS solver object details.
        public let semtechGnss: SemtechGnssDetail?

        public init(semtechGnss: SemtechGnssDetail? = nil) {
            self.semtechGnss = semtechGnss
        }

        private enum CodingKeys: String, CodingKey {
            case semtechGnss = "SemtechGnss"
        }
    }

    public struct Positioning: AWSEncodableShape & AWSDecodableShape {
        public let clockSync: Int?
        public let gnss: Int?
        public let stream: Int?

        public init(clockSync: Int? = nil, gnss: Int? = nil, stream: Int? = nil) {
            self.clockSync = clockSync
            self.gnss = gnss
            self.stream = stream
        }

        public func validate(name: String) throws {
            try self.validate(self.clockSync, name: "clockSync", parent: name, max: 223)
            try self.validate(self.clockSync, name: "clockSync", parent: name, min: 1)
            try self.validate(self.gnss, name: "gnss", parent: name, max: 223)
            try self.validate(self.gnss, name: "gnss", parent: name, min: 1)
            try self.validate(self.stream, name: "stream", parent: name, max: 223)
            try self.validate(self.stream, name: "stream", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case clockSync = "ClockSync"
            case gnss = "Gnss"
            case stream = "Stream"
        }
    }

    public struct ProximityEventConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Proximity event configuration object for enabling or disabling Sidewalk related event topics.
        public let sidewalk: SidewalkEventNotificationConfigurations?
        /// Denotes whether the wireless device ID proximity event topic is enabled or disabled.
        public let wirelessDeviceIdEventTopic: EventNotificationTopicStatus?

        public init(sidewalk: SidewalkEventNotificationConfigurations? = nil, wirelessDeviceIdEventTopic: EventNotificationTopicStatus? = nil) {
            self.sidewalk = sidewalk
            self.wirelessDeviceIdEventTopic = wirelessDeviceIdEventTopic
        }

        private enum CodingKeys: String, CodingKey {
            case sidewalk = "Sidewalk"
            case wirelessDeviceIdEventTopic = "WirelessDeviceIdEventTopic"
        }
    }

    public struct ProximityResourceTypeEventConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Proximity resource type event configuration object for enabling and disabling wireless device topic.
        public let sidewalk: SidewalkResourceTypeEventConfiguration?

        public init(sidewalk: SidewalkResourceTypeEventConfiguration? = nil) {
            self.sidewalk = sidewalk
        }

        private enum CodingKeys: String, CodingKey {
            case sidewalk = "Sidewalk"
        }
    }

    public struct PutPositionConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceIdentifier", location: .uri("ResourceIdentifier")),
            AWSMemberEncoding(label: "resourceType", location: .querystring("resourceType"))
        ]

        /// The position data destination that describes the AWS IoT rule that processes the device's position data for use by AWS IoT Core for LoRaWAN.
        public let destination: String?
        /// Resource identifier used to update the position configuration.
        public let resourceIdentifier: String
        /// Resource type of the resource for which you want to update the position configuration.
        public let resourceType: PositionResourceType
        /// The positioning solvers used to update the position configuration of the resource.
        public let solvers: PositionSolverConfigurations?

        public init(destination: String? = nil, resourceIdentifier: String, resourceType: PositionResourceType, solvers: PositionSolverConfigurations? = nil) {
            self.destination = destination
            self.resourceIdentifier = resourceIdentifier
            self.resourceType = resourceType
            self.solvers = solvers
        }

        public func validate(name: String) throws {
            try self.validate(self.destination, name: "destination", parent: name, max: 128)
            try self.validate(self.destination, name: "destination", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.resourceIdentifier, name: "resourceIdentifier", parent: name, pattern: "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case destination = "Destination"
            case solvers = "Solvers"
        }
    }

    public struct PutPositionConfigurationResponse: AWSDecodableShape {
        public init() {}
    }

    public struct PutResourceLogLevelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceIdentifier", location: .uri("ResourceIdentifier")),
            AWSMemberEncoding(label: "resourceType", location: .querystring("resourceType"))
        ]

        public let logLevel: LogLevel
        public let resourceIdentifier: String
        /// The type of the resource, which can be WirelessDevice or WirelessGateway.
        public let resourceType: String

        public init(logLevel: LogLevel, resourceIdentifier: String, resourceType: String) {
            self.logLevel = logLevel
            self.resourceIdentifier = resourceIdentifier
            self.resourceType = resourceType
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceIdentifier, name: "resourceIdentifier", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case logLevel = "LogLevel"
        }
    }

    public struct PutResourceLogLevelResponse: AWSDecodableShape {
        public init() {}
    }

    public struct ResetAllResourceLogLevelsRequest: AWSEncodableShape {
        public init() {}
    }

    public struct ResetAllResourceLogLevelsResponse: AWSDecodableShape {
        public init() {}
    }

    public struct ResetResourceLogLevelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceIdentifier", location: .uri("ResourceIdentifier")),
            AWSMemberEncoding(label: "resourceType", location: .querystring("resourceType"))
        ]

        public let resourceIdentifier: String
        /// The type of the resource, which can be WirelessDevice or WirelessGateway.
        public let resourceType: String

        public init(resourceIdentifier: String, resourceType: String) {
            self.resourceIdentifier = resourceIdentifier
            self.resourceType = resourceType
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceIdentifier, name: "resourceIdentifier", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ResetResourceLogLevelResponse: AWSDecodableShape {
        public init() {}
    }

    public struct SemtechGnssConfiguration: AWSEncodableShape {
        /// Whether forward error correction is enabled.
        public let fec: PositionConfigurationFec
        /// The status indicating whether the solver is enabled.
        public let status: PositionConfigurationStatus

        public init(fec: PositionConfigurationFec, status: PositionConfigurationStatus) {
            self.fec = fec
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case fec = "Fec"
            case status = "Status"
        }
    }

    public struct SemtechGnssDetail: AWSDecodableShape {
        /// Whether forward error correction is enabled.
        public let fec: PositionConfigurationFec?
        /// The vendor of the solver object.
        public let provider: PositionSolverProvider?
        /// The status indicating whether the solver is enabled.
        public let status: PositionConfigurationStatus?
        /// The type of positioning solver used.
        public let type: PositionSolverType?

        public init(fec: PositionConfigurationFec? = nil, provider: PositionSolverProvider? = nil, status: PositionConfigurationStatus? = nil, type: PositionSolverType? = nil) {
            self.fec = fec
            self.provider = provider
            self.status = status
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case fec = "Fec"
            case provider = "Provider"
            case status = "Status"
            case type = "Type"
        }
    }

    public struct SendDataToMulticastGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        public let id: String
        public let payloadData: String
        public let wirelessMetadata: MulticastWirelessMetadata

        public init(id: String, payloadData: String, wirelessMetadata: MulticastWirelessMetadata) {
            self.id = id
            self.payloadData = payloadData
            self.wirelessMetadata = wirelessMetadata
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.payloadData, name: "payloadData", parent: name, max: 2048)
            try self.validate(self.payloadData, name: "payloadData", parent: name, pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$")
            try self.wirelessMetadata.validate(name: "\(name).wirelessMetadata")
        }

        private enum CodingKeys: String, CodingKey {
            case payloadData = "PayloadData"
            case wirelessMetadata = "WirelessMetadata"
        }
    }

    public struct SendDataToMulticastGroupResponse: AWSDecodableShape {
        public let messageId: String?

        public init(messageId: String? = nil) {
            self.messageId = messageId
        }

        private enum CodingKeys: String, CodingKey {
            case messageId = "MessageId"
        }
    }

    public struct SendDataToWirelessDeviceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the wireless device to receive the data.
        public let id: String
        public let payloadData: String
        /// The transmit mode to use to send data to the wireless device. Can be: 0 for UM (unacknowledge mode) or 1 for AM (acknowledge mode).
        public let transmitMode: Int
        /// Metadata about the message request.
        public let wirelessMetadata: WirelessMetadata?

        public init(id: String, payloadData: String, transmitMode: Int, wirelessMetadata: WirelessMetadata? = nil) {
            self.id = id
            self.payloadData = payloadData
            self.transmitMode = transmitMode
            self.wirelessMetadata = wirelessMetadata
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.payloadData, name: "payloadData", parent: name, max: 2048)
            try self.validate(self.payloadData, name: "payloadData", parent: name, pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$")
            try self.validate(self.transmitMode, name: "transmitMode", parent: name, max: 1)
            try self.validate(self.transmitMode, name: "transmitMode", parent: name, min: 0)
            try self.wirelessMetadata?.validate(name: "\(name).wirelessMetadata")
        }

        private enum CodingKeys: String, CodingKey {
            case payloadData = "PayloadData"
            case transmitMode = "TransmitMode"
            case wirelessMetadata = "WirelessMetadata"
        }
    }

    public struct SendDataToWirelessDeviceResponse: AWSDecodableShape {
        /// The ID of the message sent to the wireless device.
        public let messageId: String?

        public init(messageId: String? = nil) {
            self.messageId = messageId
        }

        private enum CodingKeys: String, CodingKey {
            case messageId = "MessageId"
        }
    }

    public struct ServiceProfile: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The ID of the service profile.
        public let id: String?
        /// The name of the resource.
        public let name: String?

        public init(arn: String? = nil, id: String? = nil, name: String? = nil) {
            self.arn = arn
            self.id = id
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
            case name = "Name"
        }
    }

    public struct SessionKeysAbpV10X: AWSEncodableShape & AWSDecodableShape {
        /// The AppSKey value.
        public let appSKey: String?
        /// The NwkSKey value.
        public let nwkSKey: String?

        public init(appSKey: String? = nil, nwkSKey: String? = nil) {
            self.appSKey = appSKey
            self.nwkSKey = nwkSKey
        }

        public func validate(name: String) throws {
            try self.validate(self.appSKey, name: "appSKey", parent: name, pattern: "^[a-fA-F0-9]{32}$")
            try self.validate(self.nwkSKey, name: "nwkSKey", parent: name, pattern: "^[a-fA-F0-9]{32}$")
        }

        private enum CodingKeys: String, CodingKey {
            case appSKey = "AppSKey"
            case nwkSKey = "NwkSKey"
        }
    }

    public struct SessionKeysAbpV11: AWSEncodableShape & AWSDecodableShape {
        /// The AppSKey value.
        public let appSKey: String?
        /// The FNwkSIntKey value.
        public let fNwkSIntKey: String?
        /// The NwkSEncKey value.
        public let nwkSEncKey: String?
        /// The SNwkSIntKey value.
        public let sNwkSIntKey: String?

        public init(appSKey: String? = nil, fNwkSIntKey: String? = nil, nwkSEncKey: String? = nil, sNwkSIntKey: String? = nil) {
            self.appSKey = appSKey
            self.fNwkSIntKey = fNwkSIntKey
            self.nwkSEncKey = nwkSEncKey
            self.sNwkSIntKey = sNwkSIntKey
        }

        public func validate(name: String) throws {
            try self.validate(self.appSKey, name: "appSKey", parent: name, pattern: "^[a-fA-F0-9]{32}$")
            try self.validate(self.fNwkSIntKey, name: "fNwkSIntKey", parent: name, pattern: "^[a-fA-F0-9]{32}$")
            try self.validate(self.nwkSEncKey, name: "nwkSEncKey", parent: name, pattern: "^[a-fA-F0-9]{32}$")
            try self.validate(self.sNwkSIntKey, name: "sNwkSIntKey", parent: name, pattern: "^[a-fA-F0-9]{32}$")
        }

        private enum CodingKeys: String, CodingKey {
            case appSKey = "AppSKey"
            case fNwkSIntKey = "FNwkSIntKey"
            case nwkSEncKey = "NwkSEncKey"
            case sNwkSIntKey = "SNwkSIntKey"
        }
    }

    public struct SidewalkAccountInfo: AWSEncodableShape & AWSDecodableShape {
        /// The Sidewalk Amazon ID.
        public let amazonId: String?
        /// The Sidewalk application server private key.
        public let appServerPrivateKey: String?

        public init(amazonId: String? = nil, appServerPrivateKey: String? = nil) {
            self.amazonId = amazonId
            self.appServerPrivateKey = appServerPrivateKey
        }

        public func validate(name: String) throws {
            try self.validate(self.amazonId, name: "amazonId", parent: name, max: 2048)
            try self.validate(self.appServerPrivateKey, name: "appServerPrivateKey", parent: name, max: 4096)
            try self.validate(self.appServerPrivateKey, name: "appServerPrivateKey", parent: name, min: 1)
            try self.validate(self.appServerPrivateKey, name: "appServerPrivateKey", parent: name, pattern: "^[a-fA-F0-9]{64}$")
        }

        private enum CodingKeys: String, CodingKey {
            case amazonId = "AmazonId"
            case appServerPrivateKey = "AppServerPrivateKey"
        }
    }

    public struct SidewalkAccountInfoWithFingerprint: AWSDecodableShape {
        /// The Sidewalk Amazon ID.
        public let amazonId: String?
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The fingerprint of the Sidewalk application server private key.
        public let fingerprint: String?

        public init(amazonId: String? = nil, arn: String? = nil, fingerprint: String? = nil) {
            self.amazonId = amazonId
            self.arn = arn
            self.fingerprint = fingerprint
        }

        private enum CodingKeys: String, CodingKey {
            case amazonId = "AmazonId"
            case arn = "Arn"
            case fingerprint = "Fingerprint"
        }
    }

    public struct SidewalkDevice: AWSDecodableShape {
        public let amazonId: String?
        /// The sidewalk device certificates for Ed25519 and P256r1.
        public let deviceCertificates: [CertificateList]?
        /// The sidewalk device identification.
        public let sidewalkId: String?
        /// The Sidewalk manufacturing series number.
        public let sidewalkManufacturingSn: String?

        public init(amazonId: String? = nil, deviceCertificates: [CertificateList]? = nil, sidewalkId: String? = nil, sidewalkManufacturingSn: String? = nil) {
            self.amazonId = amazonId
            self.deviceCertificates = deviceCertificates
            self.sidewalkId = sidewalkId
            self.sidewalkManufacturingSn = sidewalkManufacturingSn
        }

        private enum CodingKeys: String, CodingKey {
            case amazonId = "AmazonId"
            case deviceCertificates = "DeviceCertificates"
            case sidewalkId = "SidewalkId"
            case sidewalkManufacturingSn = "SidewalkManufacturingSn"
        }
    }

    public struct SidewalkDeviceMetadata: AWSDecodableShape {
        /// Sidewalk device battery level.
        public let batteryLevel: BatteryLevel?
        /// Device state defines the device status of sidewalk device.
        public let deviceState: DeviceState?
        /// Sidewalk device status notification.
        public let event: Event?
        /// The RSSI value.
        public let rssi: Int?

        public init(batteryLevel: BatteryLevel? = nil, deviceState: DeviceState? = nil, event: Event? = nil, rssi: Int? = nil) {
            self.batteryLevel = batteryLevel
            self.deviceState = deviceState
            self.event = event
            self.rssi = rssi
        }

        private enum CodingKeys: String, CodingKey {
            case batteryLevel = "BatteryLevel"
            case deviceState = "DeviceState"
            case event = "Event"
            case rssi = "Rssi"
        }
    }

    public struct SidewalkEventNotificationConfigurations: AWSEncodableShape & AWSDecodableShape {
        /// Denotes whether the Amazon ID event topic is enabled or disabled.
        public let amazonIdEventTopic: EventNotificationTopicStatus?

        public init(amazonIdEventTopic: EventNotificationTopicStatus? = nil) {
            self.amazonIdEventTopic = amazonIdEventTopic
        }

        private enum CodingKeys: String, CodingKey {
            case amazonIdEventTopic = "AmazonIdEventTopic"
        }
    }

    public struct SidewalkListDevice: AWSDecodableShape {
        /// The Sidewalk Amazon ID.
        public let amazonId: String?
        /// The sidewalk device certificates for Ed25519 and P256r1.
        public let deviceCertificates: [CertificateList]?
        /// The sidewalk device identification.
        public let sidewalkId: String?
        /// The Sidewalk manufacturing series number.
        public let sidewalkManufacturingSn: String?

        public init(amazonId: String? = nil, deviceCertificates: [CertificateList]? = nil, sidewalkId: String? = nil, sidewalkManufacturingSn: String? = nil) {
            self.amazonId = amazonId
            self.deviceCertificates = deviceCertificates
            self.sidewalkId = sidewalkId
            self.sidewalkManufacturingSn = sidewalkManufacturingSn
        }

        private enum CodingKeys: String, CodingKey {
            case amazonId = "AmazonId"
            case deviceCertificates = "DeviceCertificates"
            case sidewalkId = "SidewalkId"
            case sidewalkManufacturingSn = "SidewalkManufacturingSn"
        }
    }

    public struct SidewalkResourceTypeEventConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Denotes whether the wireless device join event topic is enabled or disabled.
        public let wirelessDeviceEventTopic: EventNotificationTopicStatus?

        public init(wirelessDeviceEventTopic: EventNotificationTopicStatus? = nil) {
            self.wirelessDeviceEventTopic = wirelessDeviceEventTopic
        }

        private enum CodingKeys: String, CodingKey {
            case wirelessDeviceEventTopic = "WirelessDeviceEventTopic"
        }
    }

    public struct SidewalkSendDataToDevice: AWSEncodableShape {
        /// The duration of time in seconds to retry sending the ACK.
        public let ackModeRetryDurationSecs: Int?
        public let messageType: MessageType?
        /// The sequence number.
        public let seq: Int?

        public init(ackModeRetryDurationSecs: Int? = nil, messageType: MessageType? = nil, seq: Int? = nil) {
            self.ackModeRetryDurationSecs = ackModeRetryDurationSecs
            self.messageType = messageType
            self.seq = seq
        }

        public func validate(name: String) throws {
            try self.validate(self.ackModeRetryDurationSecs, name: "ackModeRetryDurationSecs", parent: name, max: 604_800)
            try self.validate(self.ackModeRetryDurationSecs, name: "ackModeRetryDurationSecs", parent: name, min: 0)
            try self.validate(self.seq, name: "seq", parent: name, max: 16383)
            try self.validate(self.seq, name: "seq", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case ackModeRetryDurationSecs = "AckModeRetryDurationSecs"
            case messageType = "MessageType"
            case seq = "Seq"
        }
    }

    public struct SidewalkUpdateAccount: AWSEncodableShape {
        /// The new Sidewalk application server private key.
        public let appServerPrivateKey: String?

        public init(appServerPrivateKey: String? = nil) {
            self.appServerPrivateKey = appServerPrivateKey
        }

        public func validate(name: String) throws {
            try self.validate(self.appServerPrivateKey, name: "appServerPrivateKey", parent: name, max: 4096)
            try self.validate(self.appServerPrivateKey, name: "appServerPrivateKey", parent: name, min: 1)
            try self.validate(self.appServerPrivateKey, name: "appServerPrivateKey", parent: name, pattern: "^[a-fA-F0-9]{64}$")
        }

        private enum CodingKeys: String, CodingKey {
            case appServerPrivateKey = "AppServerPrivateKey"
        }
    }

    public struct StartBulkAssociateWirelessDeviceWithMulticastGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        public let id: String
        public let queryString: String?
        public let tags: [Tag]?

        public init(id: String, queryString: String? = nil, tags: [Tag]? = nil) {
            self.id = id
            self.queryString = queryString
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.queryString, name: "queryString", parent: name, max: 4096)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
        }

        private enum CodingKeys: String, CodingKey {
            case queryString = "QueryString"
            case tags = "Tags"
        }
    }

    public struct StartBulkAssociateWirelessDeviceWithMulticastGroupResponse: AWSDecodableShape {
        public init() {}
    }

    public struct StartBulkDisassociateWirelessDeviceFromMulticastGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        public let id: String
        public let queryString: String?
        public let tags: [Tag]?

        public init(id: String, queryString: String? = nil, tags: [Tag]? = nil) {
            self.id = id
            self.queryString = queryString
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.queryString, name: "queryString", parent: name, max: 4096)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
        }

        private enum CodingKeys: String, CodingKey {
            case queryString = "QueryString"
            case tags = "Tags"
        }
    }

    public struct StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse: AWSDecodableShape {
        public init() {}
    }

    public struct StartFuotaTaskRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        public let id: String
        public let loRaWAN: LoRaWANStartFuotaTask?

        public init(id: String, loRaWAN: LoRaWANStartFuotaTask? = nil) {
            self.id = id
            self.loRaWAN = loRaWAN
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case loRaWAN = "LoRaWAN"
        }
    }

    public struct StartFuotaTaskResponse: AWSDecodableShape {
        public init() {}
    }

    public struct StartMulticastGroupSessionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        public let id: String
        public let loRaWAN: LoRaWANMulticastSession

        public init(id: String, loRaWAN: LoRaWANMulticastSession) {
            self.id = id
            self.loRaWAN = loRaWAN
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.loRaWAN.validate(name: "\(name).loRaWAN")
        }

        private enum CodingKeys: String, CodingKey {
            case loRaWAN = "LoRaWAN"
        }
    }

    public struct StartMulticastGroupSessionResponse: AWSDecodableShape {
        public init() {}
    }

    public struct Tag: AWSEncodableShape & AWSDecodableShape {
        /// The tag's key value.
        public let key: String
        /// The tag's value.
        public let value: String

        public init(key: String, value: String) {
            self.key = key
            self.value = value
        }

        public func validate(name: String) throws {
            try self.validate(self.key, name: "key", parent: name, max: 128)
            try self.validate(self.key, name: "key", parent: name, min: 1)
            try self.validate(self.value, name: "value", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case key = "Key"
            case value = "Value"
        }
    }

    public struct TagResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .querystring("resourceArn"))
        ]

        /// The ARN of the resource to add tags to.
        public let resourceArn: String
        /// Adds to or modifies the tags of the given resource. Tags are metadata that you can use to manage a resource.
        public let tags: [Tag]

        public init(resourceArn: String, tags: [Tag]) {
            self.resourceArn = resourceArn
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, max: 1011)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, min: 1)
            try self.tags.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "Tags"
        }
    }

    public struct TagResourceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct TdscdmaLocalId: AWSEncodableShape {
        /// Cell parameters for TD-SCDMA.
        public let cellParams: Int
        /// TD-SCDMA UTRA (Universal Terrestrial Radio Access Network) absolute RF channel number (UARFCN).
        public let uarfcn: Int

        public init(cellParams: Int, uarfcn: Int) {
            self.cellParams = cellParams
            self.uarfcn = uarfcn
        }

        public func validate(name: String) throws {
            try self.validate(self.cellParams, name: "cellParams", parent: name, max: 127)
            try self.validate(self.cellParams, name: "cellParams", parent: name, min: 0)
            try self.validate(self.uarfcn, name: "uarfcn", parent: name, max: 16383)
            try self.validate(self.uarfcn, name: "uarfcn", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case cellParams = "CellParams"
            case uarfcn = "Uarfcn"
        }
    }

    public struct TdscdmaNmrObj: AWSEncodableShape {
        /// Cell parameters for TD-SCDMA network measurement reports object.
        public let cellParams: Int
        /// Path loss, or path attenuation, is the reduction in power density of an electromagnetic wave as it  propagates through space.
        public let pathLoss: Int?
        /// Code power of the received signal, measured in decibel-milliwatts (dBm).
        public let rscp: Int?
        /// TD-SCDMA UTRA (Universal Terrestrial Radio Access Network) absolute RF channel number.
        public let uarfcn: Int
        /// UTRAN (UMTS Terrestrial Radio Access Network) cell global identifier.
        public let utranCid: Int?

        public init(cellParams: Int, pathLoss: Int? = nil, rscp: Int? = nil, uarfcn: Int, utranCid: Int? = nil) {
            self.cellParams = cellParams
            self.pathLoss = pathLoss
            self.rscp = rscp
            self.uarfcn = uarfcn
            self.utranCid = utranCid
        }

        public func validate(name: String) throws {
            try self.validate(self.cellParams, name: "cellParams", parent: name, max: 127)
            try self.validate(self.cellParams, name: "cellParams", parent: name, min: 0)
            try self.validate(self.pathLoss, name: "pathLoss", parent: name, max: 158)
            try self.validate(self.pathLoss, name: "pathLoss", parent: name, min: 46)
            try self.validate(self.rscp, name: "rscp", parent: name, max: -25)
            try self.validate(self.rscp, name: "rscp", parent: name, min: -120)
            try self.validate(self.uarfcn, name: "uarfcn", parent: name, max: 16383)
            try self.validate(self.uarfcn, name: "uarfcn", parent: name, min: 0)
            try self.validate(self.utranCid, name: "utranCid", parent: name, max: 268_435_455)
            try self.validate(self.utranCid, name: "utranCid", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case cellParams = "CellParams"
            case pathLoss = "PathLoss"
            case rscp = "Rscp"
            case uarfcn = "Uarfcn"
            case utranCid = "UtranCid"
        }
    }

    public struct TdscdmaObj: AWSEncodableShape {
        /// Location Area Code.
        public let lac: Int?
        /// Mobile Country Code.
        public let mcc: Int
        /// Mobile Network Code.
        public let mnc: Int
        /// Path loss, or path attenuation, is the reduction in power density of an electromagnetic wave as it propagates through space.
        public let pathLoss: Int?
        /// Signal power of the received signal (Received Signal Code Power), measured in decibel-milliwatts (dBm).
        public let rscp: Int?
        /// TD-SCDMA local identification (local ID) information.
        public let tdscdmaLocalId: TdscdmaLocalId?
        /// TD-SCDMA object for network measurement reports.
        public let tdscdmaNmr: [TdscdmaNmrObj]?
        /// TD-SCDMA Timing advance.
        public let tdscdmaTimingAdvance: Int?
        /// UTRAN (UMTS Terrestrial Radio Access Network) Cell Global Identifier.
        public let utranCid: Int

        public init(lac: Int? = nil, mcc: Int, mnc: Int, pathLoss: Int? = nil, rscp: Int? = nil, tdscdmaLocalId: TdscdmaLocalId? = nil, tdscdmaNmr: [TdscdmaNmrObj]? = nil, tdscdmaTimingAdvance: Int? = nil, utranCid: Int) {
            self.lac = lac
            self.mcc = mcc
            self.mnc = mnc
            self.pathLoss = pathLoss
            self.rscp = rscp
            self.tdscdmaLocalId = tdscdmaLocalId
            self.tdscdmaNmr = tdscdmaNmr
            self.tdscdmaTimingAdvance = tdscdmaTimingAdvance
            self.utranCid = utranCid
        }

        public func validate(name: String) throws {
            try self.validate(self.lac, name: "lac", parent: name, max: 65535)
            try self.validate(self.lac, name: "lac", parent: name, min: 1)
            try self.validate(self.mcc, name: "mcc", parent: name, max: 999)
            try self.validate(self.mcc, name: "mcc", parent: name, min: 200)
            try self.validate(self.mnc, name: "mnc", parent: name, max: 999)
            try self.validate(self.mnc, name: "mnc", parent: name, min: 0)
            try self.validate(self.pathLoss, name: "pathLoss", parent: name, max: 158)
            try self.validate(self.pathLoss, name: "pathLoss", parent: name, min: 46)
            try self.validate(self.rscp, name: "rscp", parent: name, max: -25)
            try self.validate(self.rscp, name: "rscp", parent: name, min: -120)
            try self.tdscdmaLocalId?.validate(name: "\(name).tdscdmaLocalId")
            try self.tdscdmaNmr?.forEach {
                try $0.validate(name: "\(name).tdscdmaNmr[]")
            }
            try self.validate(self.tdscdmaNmr, name: "tdscdmaNmr", parent: name, max: 32)
            try self.validate(self.tdscdmaNmr, name: "tdscdmaNmr", parent: name, min: 1)
            try self.validate(self.tdscdmaTimingAdvance, name: "tdscdmaTimingAdvance", parent: name, max: 1530)
            try self.validate(self.tdscdmaTimingAdvance, name: "tdscdmaTimingAdvance", parent: name, min: 0)
            try self.validate(self.utranCid, name: "utranCid", parent: name, max: 268_435_455)
            try self.validate(self.utranCid, name: "utranCid", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case lac = "Lac"
            case mcc = "Mcc"
            case mnc = "Mnc"
            case pathLoss = "PathLoss"
            case rscp = "Rscp"
            case tdscdmaLocalId = "TdscdmaLocalId"
            case tdscdmaNmr = "TdscdmaNmr"
            case tdscdmaTimingAdvance = "TdscdmaTimingAdvance"
            case utranCid = "UtranCid"
        }
    }

    public struct TestWirelessDeviceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// The ID of the wireless device to test.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct TestWirelessDeviceResponse: AWSDecodableShape {
        /// The result returned by the test.
        public let result: String?

        public init(result: String? = nil) {
            self.result = result
        }

        private enum CodingKeys: String, CodingKey {
            case result = "Result"
        }
    }

    public struct TraceContent: AWSEncodableShape & AWSDecodableShape {
        public let logLevel: LogLevel?
        public let wirelessDeviceFrameInfo: WirelessDeviceFrameInfo?

        public init(logLevel: LogLevel? = nil, wirelessDeviceFrameInfo: WirelessDeviceFrameInfo? = nil) {
            self.logLevel = logLevel
            self.wirelessDeviceFrameInfo = wirelessDeviceFrameInfo
        }

        private enum CodingKeys: String, CodingKey {
            case logLevel = "LogLevel"
            case wirelessDeviceFrameInfo = "WirelessDeviceFrameInfo"
        }
    }

    public struct UntagResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .querystring("resourceArn")),
            AWSMemberEncoding(label: "tagKeys", location: .querystring("tagKeys"))
        ]

        /// The ARN of the resource to remove tags from.
        public let resourceArn: String
        /// A list of the keys of the tags to remove from the resource.
        public let tagKeys: [String]

        public init(resourceArn: String, tagKeys: [String]) {
            self.resourceArn = resourceArn
            self.tagKeys = tagKeys
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, max: 1011)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, min: 1)
            try self.tagKeys.forEach {
                try validate($0, name: "tagKeys[]", parent: name, max: 128)
                try validate($0, name: "tagKeys[]", parent: name, min: 1)
            }
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, max: 200)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct UntagResourceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateAbpV10X: AWSEncodableShape {
        /// The FCnt init value.
        public let fCntStart: Int?

        public init(fCntStart: Int? = nil) {
            self.fCntStart = fCntStart
        }

        public func validate(name: String) throws {
            try self.validate(self.fCntStart, name: "fCntStart", parent: name, max: 65535)
            try self.validate(self.fCntStart, name: "fCntStart", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case fCntStart = "FCntStart"
        }
    }

    public struct UpdateAbpV11: AWSEncodableShape {
        /// The FCnt init value.
        public let fCntStart: Int?

        public init(fCntStart: Int? = nil) {
            self.fCntStart = fCntStart
        }

        public func validate(name: String) throws {
            try self.validate(self.fCntStart, name: "fCntStart", parent: name, max: 65535)
            try self.validate(self.fCntStart, name: "fCntStart", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case fCntStart = "FCntStart"
        }
    }

    public struct UpdateDestinationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "name", location: .uri("Name"))
        ]

        /// A new description of the resource.
        public let description: String?
        /// The new rule name or topic rule to send messages to.
        public let expression: String?
        /// The type of value in Expression.
        public let expressionType: ExpressionType?
        /// The new name of the resource.
        public let name: String
        /// The ARN of the IAM Role that authorizes the destination.
        public let roleArn: String?

        public init(description: String? = nil, expression: String? = nil, expressionType: ExpressionType? = nil, name: String, roleArn: String? = nil) {
            self.description = description
            self.expression = expression
            self.expressionType = expressionType
            self.name = name
            self.roleArn = roleArn
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.validate(self.expression, name: "expression", parent: name, max: 2048)
            try self.validate(self.name, name: "name", parent: name, max: 128)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.roleArn, name: "roleArn", parent: name, max: 2048)
            try self.validate(self.roleArn, name: "roleArn", parent: name, min: 20)
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case expression = "Expression"
            case expressionType = "ExpressionType"
            case roleArn = "RoleArn"
        }
    }

    public struct UpdateDestinationResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateEventConfigurationByResourceTypesRequest: AWSEncodableShape {
        /// Connection status resource type event configuration object for enabling and disabling wireless gateway topic.
        public let connectionStatus: ConnectionStatusResourceTypeEventConfiguration?
        /// Device registration state resource type event configuration object for enabling and disabling wireless gateway topic.
        public let deviceRegistrationState: DeviceRegistrationStateResourceTypeEventConfiguration?
        /// Join resource type event configuration object for enabling and disabling wireless device topic.
        public let join: JoinResourceTypeEventConfiguration?
        /// Message delivery status resource type event configuration object for enabling and disabling wireless device topic.
        public let messageDeliveryStatus: MessageDeliveryStatusResourceTypeEventConfiguration?
        /// Proximity resource type event configuration object for enabling and disabling wireless gateway topic.
        public let proximity: ProximityResourceTypeEventConfiguration?

        public init(connectionStatus: ConnectionStatusResourceTypeEventConfiguration? = nil, deviceRegistrationState: DeviceRegistrationStateResourceTypeEventConfiguration? = nil, join: JoinResourceTypeEventConfiguration? = nil, messageDeliveryStatus: MessageDeliveryStatusResourceTypeEventConfiguration? = nil, proximity: ProximityResourceTypeEventConfiguration? = nil) {
            self.connectionStatus = connectionStatus
            self.deviceRegistrationState = deviceRegistrationState
            self.join = join
            self.messageDeliveryStatus = messageDeliveryStatus
            self.proximity = proximity
        }

        private enum CodingKeys: String, CodingKey {
            case connectionStatus = "ConnectionStatus"
            case deviceRegistrationState = "DeviceRegistrationState"
            case join = "Join"
            case messageDeliveryStatus = "MessageDeliveryStatus"
            case proximity = "Proximity"
        }
    }

    public struct UpdateEventConfigurationByResourceTypesResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateFPorts: AWSEncodableShape {
        /// LoRaWAN application, which can be used for geolocation by activating positioning.
        public let applications: [ApplicationConfig]?
        /// Positioning FPorts for the ClockSync, Stream, and GNSS functions.
        public let positioning: Positioning?

        public init(applications: [ApplicationConfig]? = nil, positioning: Positioning? = nil) {
            self.applications = applications
            self.positioning = positioning
        }

        public func validate(name: String) throws {
            try self.applications?.forEach {
                try $0.validate(name: "\(name).applications[]")
            }
            try self.positioning?.validate(name: "\(name).positioning")
        }

        private enum CodingKeys: String, CodingKey {
            case applications = "Applications"
            case positioning = "Positioning"
        }
    }

    public struct UpdateFuotaTaskRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        public let description: String?
        public let firmwareUpdateImage: String?
        public let firmwareUpdateRole: String?
        public let id: String
        public let loRaWAN: LoRaWANFuotaTask?
        public let name: String?

        public init(description: String? = nil, firmwareUpdateImage: String? = nil, firmwareUpdateRole: String? = nil, id: String, loRaWAN: LoRaWANFuotaTask? = nil, name: String? = nil) {
            self.description = description
            self.firmwareUpdateImage = firmwareUpdateImage
            self.firmwareUpdateRole = firmwareUpdateRole
            self.id = id
            self.loRaWAN = loRaWAN
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.validate(self.firmwareUpdateImage, name: "firmwareUpdateImage", parent: name, max: 4096)
            try self.validate(self.firmwareUpdateImage, name: "firmwareUpdateImage", parent: name, min: 1)
            try self.validate(self.firmwareUpdateRole, name: "firmwareUpdateRole", parent: name, max: 2048)
            try self.validate(self.firmwareUpdateRole, name: "firmwareUpdateRole", parent: name, min: 1)
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case firmwareUpdateImage = "FirmwareUpdateImage"
            case firmwareUpdateRole = "FirmwareUpdateRole"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
        }
    }

    public struct UpdateFuotaTaskResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateLogLevelsByResourceTypesRequest: AWSEncodableShape {
        public let defaultLogLevel: LogLevel?
        public let wirelessDeviceLogOptions: [WirelessDeviceLogOption]?
        public let wirelessGatewayLogOptions: [WirelessGatewayLogOption]?

        public init(defaultLogLevel: LogLevel? = nil, wirelessDeviceLogOptions: [WirelessDeviceLogOption]? = nil, wirelessGatewayLogOptions: [WirelessGatewayLogOption]? = nil) {
            self.defaultLogLevel = defaultLogLevel
            self.wirelessDeviceLogOptions = wirelessDeviceLogOptions
            self.wirelessGatewayLogOptions = wirelessGatewayLogOptions
        }

        private enum CodingKeys: String, CodingKey {
            case defaultLogLevel = "DefaultLogLevel"
            case wirelessDeviceLogOptions = "WirelessDeviceLogOptions"
            case wirelessGatewayLogOptions = "WirelessGatewayLogOptions"
        }
    }

    public struct UpdateLogLevelsByResourceTypesResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateMulticastGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        public let description: String?
        public let id: String
        public let loRaWAN: LoRaWANMulticast?
        public let name: String?

        public init(description: String? = nil, id: String, loRaWAN: LoRaWANMulticast? = nil, name: String? = nil) {
            self.description = description
            self.id = id
            self.loRaWAN = loRaWAN
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
        }
    }

    public struct UpdateMulticastGroupResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateNetworkAnalyzerConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "configurationName", location: .uri("ConfigurationName"))
        ]

        public let configurationName: String
        public let description: String?
        public let traceContent: TraceContent?
        /// Wireless device resources to add to the network analyzer configuration. Provide the  WirelessDeviceId of the resource to add in the input array.
        public let wirelessDevicesToAdd: [String]?
        /// Wireless device resources to remove from the network analyzer configuration. Provide the  WirelessDeviceId of the resources to remove in the input array.
        public let wirelessDevicesToRemove: [String]?
        /// Wireless gateway resources to add to the network analyzer configuration. Provide the  WirelessGatewayId of the resource to add in the input array.
        public let wirelessGatewaysToAdd: [String]?
        /// Wireless gateway resources to remove from the network analyzer configuration. Provide the  WirelessGatewayId of the resources to remove in the input array.
        public let wirelessGatewaysToRemove: [String]?

        public init(configurationName: String, description: String? = nil, traceContent: TraceContent? = nil, wirelessDevicesToAdd: [String]? = nil, wirelessDevicesToRemove: [String]? = nil, wirelessGatewaysToAdd: [String]? = nil, wirelessGatewaysToRemove: [String]? = nil) {
            self.configurationName = configurationName
            self.description = description
            self.traceContent = traceContent
            self.wirelessDevicesToAdd = wirelessDevicesToAdd
            self.wirelessDevicesToRemove = wirelessDevicesToRemove
            self.wirelessGatewaysToAdd = wirelessGatewaysToAdd
            self.wirelessGatewaysToRemove = wirelessGatewaysToRemove
        }

        public func validate(name: String) throws {
            try self.validate(self.configurationName, name: "configurationName", parent: name, max: 1024)
            try self.validate(self.configurationName, name: "configurationName", parent: name, min: 1)
            try self.validate(self.configurationName, name: "configurationName", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.wirelessDevicesToAdd?.forEach {
                try validate($0, name: "wirelessDevicesToAdd[]", parent: name, max: 256)
            }
            try self.validate(self.wirelessDevicesToAdd, name: "wirelessDevicesToAdd", parent: name, max: 250)
            try self.wirelessDevicesToRemove?.forEach {
                try validate($0, name: "wirelessDevicesToRemove[]", parent: name, max: 256)
            }
            try self.validate(self.wirelessDevicesToRemove, name: "wirelessDevicesToRemove", parent: name, max: 250)
            try self.wirelessGatewaysToAdd?.forEach {
                try validate($0, name: "wirelessGatewaysToAdd[]", parent: name, max: 256)
            }
            try self.wirelessGatewaysToRemove?.forEach {
                try validate($0, name: "wirelessGatewaysToRemove[]", parent: name, max: 256)
            }
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case traceContent = "TraceContent"
            case wirelessDevicesToAdd = "WirelessDevicesToAdd"
            case wirelessDevicesToRemove = "WirelessDevicesToRemove"
            case wirelessGatewaysToAdd = "WirelessGatewaysToAdd"
            case wirelessGatewaysToRemove = "WirelessGatewaysToRemove"
        }
    }

    public struct UpdateNetworkAnalyzerConfigurationResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdatePartnerAccountRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "partnerAccountId", location: .uri("PartnerAccountId")),
            AWSMemberEncoding(label: "partnerType", location: .querystring("partnerType"))
        ]

        /// The ID of the partner account to update.
        public let partnerAccountId: String
        /// The partner type.
        public let partnerType: PartnerType
        /// The Sidewalk account credentials.
        public let sidewalk: SidewalkUpdateAccount

        public init(partnerAccountId: String, partnerType: PartnerType, sidewalk: SidewalkUpdateAccount) {
            self.partnerAccountId = partnerAccountId
            self.partnerType = partnerType
            self.sidewalk = sidewalk
        }

        public func validate(name: String) throws {
            try self.validate(self.partnerAccountId, name: "partnerAccountId", parent: name, max: 256)
            try self.sidewalk.validate(name: "\(name).sidewalk")
        }

        private enum CodingKeys: String, CodingKey {
            case sidewalk = "Sidewalk"
        }
    }

    public struct UpdatePartnerAccountResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdatePositionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceIdentifier", location: .uri("ResourceIdentifier")),
            AWSMemberEncoding(label: "resourceType", location: .querystring("resourceType"))
        ]

        /// The position information of the resource.
        public let position: [Float]
        /// Resource identifier of the resource for which position is updated.
        public let resourceIdentifier: String
        /// Resource type of the resource for which position is updated.
        public let resourceType: PositionResourceType

        public init(position: [Float], resourceIdentifier: String, resourceType: PositionResourceType) {
            self.position = position
            self.resourceIdentifier = resourceIdentifier
            self.resourceType = resourceType
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceIdentifier, name: "resourceIdentifier", parent: name, pattern: "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case position = "Position"
        }
    }

    public struct UpdatePositionResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateResourceEventConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "identifier", location: .uri("Identifier")),
            AWSMemberEncoding(label: "identifierType", location: .querystring("identifierType")),
            AWSMemberEncoding(label: "partnerType", location: .querystring("partnerType"))
        ]

        /// Event configuration for the connection status event.
        public let connectionStatus: ConnectionStatusEventConfiguration?
        /// Event configuration for the device registration state event.
        public let deviceRegistrationState: DeviceRegistrationStateEventConfiguration?
        /// Resource identifier to opt in for event messaging.
        public let identifier: String
        /// Identifier type of the particular resource identifier for event configuration.
        public let identifierType: IdentifierType
        /// Event configuration for the join event.
        public let join: JoinEventConfiguration?
        /// Event configuration for the message delivery status event.
        public let messageDeliveryStatus: MessageDeliveryStatusEventConfiguration?
        /// Partner type of the resource if the identifier type is PartnerAccountId
        public let partnerType: EventNotificationPartnerType?
        /// Event configuration for the proximity event.
        public let proximity: ProximityEventConfiguration?

        public init(connectionStatus: ConnectionStatusEventConfiguration? = nil, deviceRegistrationState: DeviceRegistrationStateEventConfiguration? = nil, identifier: String, identifierType: IdentifierType, join: JoinEventConfiguration? = nil, messageDeliveryStatus: MessageDeliveryStatusEventConfiguration? = nil, partnerType: EventNotificationPartnerType? = nil, proximity: ProximityEventConfiguration? = nil) {
            self.connectionStatus = connectionStatus
            self.deviceRegistrationState = deviceRegistrationState
            self.identifier = identifier
            self.identifierType = identifierType
            self.join = join
            self.messageDeliveryStatus = messageDeliveryStatus
            self.partnerType = partnerType
            self.proximity = proximity
        }

        public func validate(name: String) throws {
            try self.validate(self.identifier, name: "identifier", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case connectionStatus = "ConnectionStatus"
            case deviceRegistrationState = "DeviceRegistrationState"
            case join = "Join"
            case messageDeliveryStatus = "MessageDeliveryStatus"
            case proximity = "Proximity"
        }
    }

    public struct UpdateResourceEventConfigurationResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateResourcePositionRequest: AWSEncodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "geoJsonPayload"
        public static let _options: AWSShapeOptions = [.rawPayload]
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceIdentifier", location: .uri("ResourceIdentifier")),
            AWSMemberEncoding(label: "resourceType", location: .querystring("resourceType"))
        ]

        /// The position information of the resource, displayed as a JSON payload. The payload uses the GeoJSON format,  which a format that's used to encode geographic data structures. For more information, see GeoJSON.
        public let geoJsonPayload: AWSPayload?
        /// The identifier of the resource for which position information is updated. It can be the wireless device ID or the wireless gateway ID depending on the resource type.
        public let resourceIdentifier: String
        /// The type of resource for which position information is updated, which can be a wireless device or a wireless gateway.
        public let resourceType: PositionResourceType

        public init(geoJsonPayload: AWSPayload? = nil, resourceIdentifier: String, resourceType: PositionResourceType) {
            self.geoJsonPayload = geoJsonPayload
            self.resourceIdentifier = resourceIdentifier
            self.resourceType = resourceType
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceIdentifier, name: "resourceIdentifier", parent: name, pattern: "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct UpdateResourcePositionResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateWirelessDeviceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// A new description of the resource.
        public let description: String?
        /// The name of the new destination for the device.
        public let destinationName: String?
        /// The ID of the resource to update.
        public let id: String
        /// The updated wireless device's configuration.
        public let loRaWAN: LoRaWANUpdateDevice?
        /// The new name of the resource.
        public let name: String?
        /// FPort values for the GNSS, stream, and ClockSync functions of the positioning information.
        public let positioning: PositioningConfigStatus?

        public init(description: String? = nil, destinationName: String? = nil, id: String, loRaWAN: LoRaWANUpdateDevice? = nil, name: String? = nil, positioning: PositioningConfigStatus? = nil) {
            self.description = description
            self.destinationName = destinationName
            self.id = id
            self.loRaWAN = loRaWAN
            self.name = name
            self.positioning = positioning
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.validate(self.destinationName, name: "destinationName", parent: name, max: 128)
            try self.validate(self.destinationName, name: "destinationName", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.loRaWAN?.validate(name: "\(name).loRaWAN")
            try self.validate(self.name, name: "name", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case destinationName = "DestinationName"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case positioning = "Positioning"
        }
    }

    public struct UpdateWirelessDeviceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateWirelessGatewayRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri("Id"))
        ]

        /// A new description of the resource.
        public let description: String?
        /// The ID of the resource to update.
        public let id: String
        public let joinEuiFilters: [[String]]?
        /// The new name of the resource.
        public let name: String?
        public let netIdFilters: [String]?

        public init(description: String? = nil, id: String, joinEuiFilters: [[String]]? = nil, name: String? = nil, netIdFilters: [String]? = nil) {
            self.description = description
            self.id = id
            self.joinEuiFilters = joinEuiFilters
            self.name = name
            self.netIdFilters = netIdFilters
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.joinEuiFilters?.forEach {
                try validate($0, name: "joinEuiFilters[]", parent: name, max: 2)
                try validate($0, name: "joinEuiFilters[]", parent: name, min: 2)
            }
            try self.validate(self.joinEuiFilters, name: "joinEuiFilters", parent: name, max: 3)
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.netIdFilters?.forEach {
                try validate($0, name: "netIdFilters[]", parent: name, pattern: "^[a-fA-F0-9]{6}$")
            }
            try self.validate(self.netIdFilters, name: "netIdFilters", parent: name, max: 10)
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case joinEuiFilters = "JoinEuiFilters"
            case name = "Name"
            case netIdFilters = "NetIdFilters"
        }
    }

    public struct UpdateWirelessGatewayResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateWirelessGatewayTaskCreate: AWSEncodableShape & AWSDecodableShape {
        /// The properties that relate to the LoRaWAN wireless gateway.
        public let loRaWAN: LoRaWANUpdateGatewayTaskCreate?
        /// The IAM role used to read data from the S3 bucket.
        public let updateDataRole: String?
        /// The link to the S3 bucket.
        public let updateDataSource: String?

        public init(loRaWAN: LoRaWANUpdateGatewayTaskCreate? = nil, updateDataRole: String? = nil, updateDataSource: String? = nil) {
            self.loRaWAN = loRaWAN
            self.updateDataRole = updateDataRole
            self.updateDataSource = updateDataSource
        }

        public func validate(name: String) throws {
            try self.loRaWAN?.validate(name: "\(name).loRaWAN")
            try self.validate(self.updateDataRole, name: "updateDataRole", parent: name, max: 4096)
            try self.validate(self.updateDataRole, name: "updateDataRole", parent: name, min: 1)
            try self.validate(self.updateDataSource, name: "updateDataSource", parent: name, max: 4096)
            try self.validate(self.updateDataSource, name: "updateDataSource", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case loRaWAN = "LoRaWAN"
            case updateDataRole = "UpdateDataRole"
            case updateDataSource = "UpdateDataSource"
        }
    }

    public struct UpdateWirelessGatewayTaskEntry: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The ID of the new wireless gateway task entry.
        public let id: String?
        /// The properties that relate to the LoRaWAN wireless gateway.
        public let loRaWAN: LoRaWANUpdateGatewayTaskEntry?

        public init(arn: String? = nil, id: String? = nil, loRaWAN: LoRaWANUpdateGatewayTaskEntry? = nil) {
            self.arn = arn
            self.id = id
            self.loRaWAN = loRaWAN
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
            case loRaWAN = "LoRaWAN"
        }
    }

    public struct WcdmaLocalId: AWSEncodableShape {
        /// Primary Scrambling Code.
        public let psc: Int
        /// WCDMA UTRA Absolute RF Channel Number downlink.
        public let uarfcndl: Int

        public init(psc: Int, uarfcndl: Int) {
            self.psc = psc
            self.uarfcndl = uarfcndl
        }

        public func validate(name: String) throws {
            try self.validate(self.psc, name: "psc", parent: name, max: 511)
            try self.validate(self.psc, name: "psc", parent: name, min: 0)
            try self.validate(self.uarfcndl, name: "uarfcndl", parent: name, max: 16383)
            try self.validate(self.uarfcndl, name: "uarfcndl", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case psc = "Psc"
            case uarfcndl = "Uarfcndl"
        }
    }

    public struct WcdmaNmrObj: AWSEncodableShape {
        /// Path loss, or path attenuation, is the reduction in power density of an electromagnetic wave as  it propagates through space.
        public let pathLoss: Int?
        /// Primary Scrambling Code.
        public let psc: Int
        /// Received Signal Code Power (signal power) (dBm)
        public let rscp: Int?
        /// WCDMA UTRA Absolute RF Channel Number downlink.
        public let uarfcndl: Int
        /// UTRAN (UMTS Terrestrial Radio Access Network) Cell Global Identifier.
        public let utranCid: Int

        public init(pathLoss: Int? = nil, psc: Int, rscp: Int? = nil, uarfcndl: Int, utranCid: Int) {
            self.pathLoss = pathLoss
            self.psc = psc
            self.rscp = rscp
            self.uarfcndl = uarfcndl
            self.utranCid = utranCid
        }

        public func validate(name: String) throws {
            try self.validate(self.pathLoss, name: "pathLoss", parent: name, max: 158)
            try self.validate(self.pathLoss, name: "pathLoss", parent: name, min: 46)
            try self.validate(self.psc, name: "psc", parent: name, max: 511)
            try self.validate(self.psc, name: "psc", parent: name, min: 0)
            try self.validate(self.rscp, name: "rscp", parent: name, max: -25)
            try self.validate(self.rscp, name: "rscp", parent: name, min: -120)
            try self.validate(self.uarfcndl, name: "uarfcndl", parent: name, max: 16383)
            try self.validate(self.uarfcndl, name: "uarfcndl", parent: name, min: 0)
            try self.validate(self.utranCid, name: "utranCid", parent: name, max: 268_435_455)
            try self.validate(self.utranCid, name: "utranCid", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case pathLoss = "PathLoss"
            case psc = "Psc"
            case rscp = "Rscp"
            case uarfcndl = "Uarfcndl"
            case utranCid = "UtranCid"
        }
    }

    public struct WcdmaObj: AWSEncodableShape {
        /// Location Area Code.
        public let lac: Int?
        /// Mobile Country Code.
        public let mcc: Int
        /// Mobile Network Code.
        public let mnc: Int
        /// Path loss, or path attenuation, is the reduction in power density of an electromagnetic wave as  it propagates through space.
        public let pathLoss: Int?
        /// Received Signal Code Power (signal power) (dBm).
        public let rscp: Int?
        /// UTRAN (UMTS Terrestrial Radio Access Network) Cell Global Identifier.
        public let utranCid: Int
        /// WCDMA local ID information.
        public let wcdmaLocalId: WcdmaLocalId?
        /// WCDMA object for network measurement reports.
        public let wcdmaNmr: [WcdmaNmrObj]?

        public init(lac: Int? = nil, mcc: Int, mnc: Int, pathLoss: Int? = nil, rscp: Int? = nil, utranCid: Int, wcdmaLocalId: WcdmaLocalId? = nil, wcdmaNmr: [WcdmaNmrObj]? = nil) {
            self.lac = lac
            self.mcc = mcc
            self.mnc = mnc
            self.pathLoss = pathLoss
            self.rscp = rscp
            self.utranCid = utranCid
            self.wcdmaLocalId = wcdmaLocalId
            self.wcdmaNmr = wcdmaNmr
        }

        public func validate(name: String) throws {
            try self.validate(self.lac, name: "lac", parent: name, max: 65535)
            try self.validate(self.lac, name: "lac", parent: name, min: 1)
            try self.validate(self.mcc, name: "mcc", parent: name, max: 999)
            try self.validate(self.mcc, name: "mcc", parent: name, min: 200)
            try self.validate(self.mnc, name: "mnc", parent: name, max: 999)
            try self.validate(self.mnc, name: "mnc", parent: name, min: 0)
            try self.validate(self.pathLoss, name: "pathLoss", parent: name, max: 158)
            try self.validate(self.pathLoss, name: "pathLoss", parent: name, min: 46)
            try self.validate(self.rscp, name: "rscp", parent: name, max: -25)
            try self.validate(self.rscp, name: "rscp", parent: name, min: -120)
            try self.validate(self.utranCid, name: "utranCid", parent: name, max: 268_435_455)
            try self.validate(self.utranCid, name: "utranCid", parent: name, min: 0)
            try self.wcdmaLocalId?.validate(name: "\(name).wcdmaLocalId")
            try self.wcdmaNmr?.forEach {
                try $0.validate(name: "\(name).wcdmaNmr[]")
            }
            try self.validate(self.wcdmaNmr, name: "wcdmaNmr", parent: name, max: 32)
            try self.validate(self.wcdmaNmr, name: "wcdmaNmr", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case lac = "Lac"
            case mcc = "Mcc"
            case mnc = "Mnc"
            case pathLoss = "PathLoss"
            case rscp = "Rscp"
            case utranCid = "UtranCid"
            case wcdmaLocalId = "WcdmaLocalId"
            case wcdmaNmr = "WcdmaNmr"
        }
    }

    public struct WiFiAccessPoint: AWSEncodableShape {
        /// Wi-Fi MAC Address.
        public let macAddress: String
        /// Recived signal strength of the WLAN measurement data.
        public let rss: Int

        public init(macAddress: String, rss: Int) {
            self.macAddress = macAddress
            self.rss = rss
        }

        public func validate(name: String) throws {
            try self.validate(self.macAddress, name: "macAddress", parent: name, max: 17)
            try self.validate(self.macAddress, name: "macAddress", parent: name, min: 12)
            try self.validate(self.macAddress, name: "macAddress", parent: name, pattern: "^([0-9A-Fa-f]{2}[:-]?){5}([0-9A-Fa-f]{2})$")
            try self.validate(self.rss, name: "rss", parent: name, max: 0)
            try self.validate(self.rss, name: "rss", parent: name, min: -128)
        }

        private enum CodingKeys: String, CodingKey {
            case macAddress = "MacAddress"
            case rss = "Rss"
        }
    }

    public struct WirelessDeviceEventLogOption: AWSEncodableShape & AWSDecodableShape {
        public let event: WirelessDeviceEvent
        public let logLevel: LogLevel

        public init(event: WirelessDeviceEvent, logLevel: LogLevel) {
            self.event = event
            self.logLevel = logLevel
        }

        private enum CodingKeys: String, CodingKey {
            case event = "Event"
            case logLevel = "LogLevel"
        }
    }

    public struct WirelessDeviceLogOption: AWSEncodableShape & AWSDecodableShape {
        public let events: [WirelessDeviceEventLogOption]?
        public let logLevel: LogLevel
        /// The wireless device type.
        public let type: WirelessDeviceType

        public init(events: [WirelessDeviceEventLogOption]? = nil, logLevel: LogLevel, type: WirelessDeviceType) {
            self.events = events
            self.logLevel = logLevel
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case events = "Events"
            case logLevel = "LogLevel"
            case type = "Type"
        }
    }

    public struct WirelessDeviceStatistics: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The name of the destination to which the device is assigned.
        public let destinationName: String?
        public let fuotaDeviceStatus: FuotaDeviceStatus?
        /// The ID of the wireless device reporting the data.
        public let id: String?
        /// The date and time when the most recent uplink was received.
        public let lastUplinkReceivedAt: String?
        /// LoRaWAN device info.
        public let loRaWAN: LoRaWANListDevice?
        public let mcGroupId: Int?
        /// The status of the wireless device in the multicast group.
        public let multicastDeviceStatus: String?
        /// The name of the resource.
        public let name: String?
        /// The Sidewalk account credentials.
        public let sidewalk: SidewalkListDevice?
        /// The wireless device type.
        public let type: WirelessDeviceType?

        public init(arn: String? = nil, destinationName: String? = nil, fuotaDeviceStatus: FuotaDeviceStatus? = nil, id: String? = nil, lastUplinkReceivedAt: String? = nil, loRaWAN: LoRaWANListDevice? = nil, mcGroupId: Int? = nil, multicastDeviceStatus: String? = nil, name: String? = nil, sidewalk: SidewalkListDevice? = nil, type: WirelessDeviceType? = nil) {
            self.arn = arn
            self.destinationName = destinationName
            self.fuotaDeviceStatus = fuotaDeviceStatus
            self.id = id
            self.lastUplinkReceivedAt = lastUplinkReceivedAt
            self.loRaWAN = loRaWAN
            self.mcGroupId = mcGroupId
            self.multicastDeviceStatus = multicastDeviceStatus
            self.name = name
            self.sidewalk = sidewalk
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case destinationName = "DestinationName"
            case fuotaDeviceStatus = "FuotaDeviceStatus"
            case id = "Id"
            case lastUplinkReceivedAt = "LastUplinkReceivedAt"
            case loRaWAN = "LoRaWAN"
            case mcGroupId = "McGroupId"
            case multicastDeviceStatus = "MulticastDeviceStatus"
            case name = "Name"
            case sidewalk = "Sidewalk"
            case type = "Type"
        }
    }

    public struct WirelessGatewayEventLogOption: AWSEncodableShape & AWSDecodableShape {
        public let event: WirelessGatewayEvent
        public let logLevel: LogLevel

        public init(event: WirelessGatewayEvent, logLevel: LogLevel) {
            self.event = event
            self.logLevel = logLevel
        }

        private enum CodingKeys: String, CodingKey {
            case event = "Event"
            case logLevel = "LogLevel"
        }
    }

    public struct WirelessGatewayLogOption: AWSEncodableShape & AWSDecodableShape {
        public let events: [WirelessGatewayEventLogOption]?
        public let logLevel: LogLevel
        public let type: WirelessGatewayType

        public init(events: [WirelessGatewayEventLogOption]? = nil, logLevel: LogLevel, type: WirelessGatewayType) {
            self.events = events
            self.logLevel = logLevel
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case events = "Events"
            case logLevel = "LogLevel"
            case type = "Type"
        }
    }

    public struct WirelessGatewayStatistics: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The description of the resource.
        public let description: String?
        /// The ID of the wireless gateway reporting the data.
        public let id: String?
        /// The date and time when the most recent uplink was received.
        public let lastUplinkReceivedAt: String?
        /// LoRaWAN gateway info.
        public let loRaWAN: LoRaWANGateway?
        /// The name of the resource.
        public let name: String?

        public init(arn: String? = nil, description: String? = nil, id: String? = nil, lastUplinkReceivedAt: String? = nil, loRaWAN: LoRaWANGateway? = nil, name: String? = nil) {
            self.arn = arn
            self.description = description
            self.id = id
            self.lastUplinkReceivedAt = lastUplinkReceivedAt
            self.loRaWAN = loRaWAN
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case description = "Description"
            case id = "Id"
            case lastUplinkReceivedAt = "LastUplinkReceivedAt"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
        }
    }

    public struct WirelessMetadata: AWSEncodableShape {
        /// LoRaWAN device info.
        public let loRaWAN: LoRaWANSendDataToDevice?
        /// The Sidewalk account credentials.
        public let sidewalk: SidewalkSendDataToDevice?

        public init(loRaWAN: LoRaWANSendDataToDevice? = nil, sidewalk: SidewalkSendDataToDevice? = nil) {
            self.loRaWAN = loRaWAN
            self.sidewalk = sidewalk
        }

        public func validate(name: String) throws {
            try self.loRaWAN?.validate(name: "\(name).loRaWAN")
            try self.sidewalk?.validate(name: "\(name).sidewalk")
        }

        private enum CodingKeys: String, CodingKey {
            case loRaWAN = "LoRaWAN"
            case sidewalk = "Sidewalk"
        }
    }
}

// MARK: - Errors

/// Error enum for IoTWireless
public struct IoTWirelessErrorType: AWSErrorType {
    enum Code: String {
        case accessDeniedException = "AccessDeniedException"
        case conflictException = "ConflictException"
        case internalServerException = "InternalServerException"
        case resourceNotFoundException = "ResourceNotFoundException"
        case throttlingException = "ThrottlingException"
        case tooManyTagsException = "TooManyTagsException"
        case validationException = "ValidationException"
    }

    private let error: Code
    public let context: AWSErrorContext?

    /// initialize IoTWireless
    public init?(errorCode: String, context: AWSErrorContext) {
        guard let error = Code(rawValue: errorCode) else { return nil }
        self.error = error
        self.context = context
    }

    internal init(_ error: Code) {
        self.error = error
        self.context = nil
    }

    /// return error code string
    public var errorCode: String { self.error.rawValue }

    /// User does not have permission to perform this action.
    public static var accessDeniedException: Self { .init(.accessDeniedException) }
    /// Adding, updating, or deleting the resource can cause an inconsistent state.
    public static var conflictException: Self { .init(.conflictException) }
    /// An unexpected error occurred while processing a request.
    public static var internalServerException: Self { .init(.internalServerException) }
    /// Resource does not exist.
    public static var resourceNotFoundException: Self { .init(.resourceNotFoundException) }
    /// The request was denied because it exceeded the allowed API request rate.
    public static var throttlingException: Self { .init(.throttlingException) }
    /// The request was denied because the resource can&#39;t have any more tags.
    public static var tooManyTagsException: Self { .init(.tooManyTagsException) }
    /// The input did not meet the specified constraints.
    public static var validationException: Self { .init(.validationException) }
}

extension IoTWirelessErrorType: Equatable {
    public static func == (lhs: IoTWirelessErrorType, rhs: IoTWirelessErrorType) -> Bool {
        lhs.error == rhs.error
    }
}

extension IoTWirelessErrorType: CustomStringConvertible {
    public var description: String {
        return "\(self.error.rawValue): \(self.message ?? "")"
    }
}
